“const”函数有什么用?

时间:2013-08-09 08:29:52

标签: c++ function const

这段代码看起来很奇怪:

const double square(double x) {

    return x*x;

}

常识告诉我,const在这种情况下意味着

  • 该函数返回const double

OR

  • 它承诺不会更改传入的double。但它是按值传递的!我不明白

OR

  • 我知道const member functions承诺不会更改*this,但这甚至不是会员功能。

修改

如果您可以将结果保存在非const double变量中并对其进行编辑,那么返回const有什么意义?

double var = square(4.5); // no compile error

var = 0.3;

5 个答案:

答案 0 :(得分:4)

很奇怪。正如你所说:

  

该函数返回const double

对于用户定义的类型,这将阻止您修改返回值:

square(2) += 5; // Error

尽管如评论中所述,但不允许对double这样的内置类型进行此操作。即使对于用户定义的类型,虽然您可能不想编写类似的代码,但也没有必要阻止它。

对于更复杂的类型,返回const值实际上可能是有害的:它会禁止移动语义,因为无法移动const对象。这可能会影响性能。

答案 1 :(得分:0)

这不是“const函数”。它是一个返回const值的函数。 “const函数”仅适用于成员函数,然后const在参数列表后面的 right 上。

这对于简单值类型的效用是可疑的。但是,如果您返回对constconst指针或其他内容的引用,那么它可能具有优点。

按值返回const简单类型的唯一方法是确保C ++ 11中的非const r值引用无法捕获它。否则,他们只会复制价值并继续前进。

答案 2 :(得分:0)

在你给出的例子中,对于任何POD类型,它都没有多大意义,但对于更复杂的类型,它是有意义的: -

const SomeClass &SomeFunction ();

返回对const对象的引用。

答案 3 :(得分:0)

在返回值之前使用const的const函数通常用于函数返回指针(或者可能是引用),表示它只返回const指针。这个返回一个double,这意味着它只返回const的双精度数。

答案 4 :(得分:-1)

它返回一个const double类型变量。

如果您这样做,大多数编译器会在您尝试将返回值分配给double类型时发出警告。