这段代码看起来很奇怪:
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;
答案 0 :(得分:4)
很奇怪。正如你所说:
该函数返回
const double
对于用户定义的类型,这将阻止您修改返回值:
square(2) += 5; // Error
尽管如评论中所述,但不允许对double
这样的内置类型进行此操作。即使对于用户定义的类型,虽然您可能不想编写类似的代码,但也没有必要阻止它。
对于更复杂的类型,返回const
值实际上可能是有害的:它会禁止移动语义,因为无法移动const
对象。这可能会影响性能。
答案 1 :(得分:0)
这不是“const函数”。它是一个返回const
值的函数。 “const函数”仅适用于成员函数,然后const
在参数列表后面的 right 上。
这对于简单值类型的效用是可疑的。但是,如果您返回对const
或const
指针或其他内容的引用,那么它可能具有优点。
按值返回const
简单类型的唯一方法是确保C ++ 11中的非const
r值引用无法捕获它。否则,他们只会复制价值并继续前进。
答案 2 :(得分:0)
在你给出的例子中,对于任何POD类型,它都没有多大意义,但对于更复杂的类型,它是有意义的: -
const SomeClass &SomeFunction ();
返回对const对象的引用。
答案 3 :(得分:0)
在返回值之前使用const的const函数通常用于函数返回指针(或者可能是引用),表示它只返回const指针。这个返回一个double,这意味着它只返回const的双精度数。
答案 4 :(得分:-1)
它返回一个const double类型变量。
如果您这样做,大多数编译器会在您尝试将返回值分配给double类型时发出警告。