这段代码看起来很奇怪:
const double square(double x) {
return x*x;
}
常识告诉我,
const
在这种情况下意味着
const double
或
double
。但是它是按值传入的!我不明白或
const member functions
承诺不会改变*this
,但这甚至不是一个成员函数。如果可以将结果保存在非
const double
变量中并进行编辑,那么返回 const
有什么意义呢??
double var = square(4.5); // no compile error
var = 0.3;
这很奇怪。正如你所说:
该函数返回一个
const double
对于用户定义的类型,这将阻止您修改返回值:
square(2) += 5; // Error
尽管如此,正如评论中所指出的,无论如何,对于像
double
这样的内置类型来说,这是不允许的。即使对于用户定义的类型,虽然您可能不想编写这样的代码,但也没有必要阻止它。
对于更复杂的类型,返回
const
值实际上可能是有害的:它会抑制移动语义,因为无法移动 const
对象。这可能会损害性能。
这不是一个“const 函数”。它是一个返回值
const
的函数。 “const 函数”仅适用于成员函数,然后 const
位于参数列表后面的 right 上。
对于简单值类型来说,它的实用性是值得怀疑的。但是,如果您返回对
const
或 const
指针或其他内容的引用,那么它可能有优点。
按值返回简单类型的
const
的唯一作用是确保它不能被 C++11 中的非 const
r 值引用捕获。否则,他们只会复制该值并继续前进。
在您给出的示例中,对于任何 POD 类型,它没有什么意义,但对于更复杂的类型,它可能有意义:-
const SomeClass &SomeFunction ();
返回对 const 对象的引用。
返回值之前带有 const 的 const 函数通常用在函数返回指针(或者可能是引用)的情况下,表示它只会返回 const 指针。这个返回一个双精度数,这意味着它只返回常量的双精度数。
它返回一个 const double 类型变量。
如果你这样做,当你尝试将返回值分配给双精度类型时,大多数编译器都会发出警告。