可能重复:
Should useless type qualifiers on return types be used, for clarity?
我对按值返回并返回const值感到困惑。例如,在功能完成后的任何功能中,所有本地人都超出范围。因此,如果我从函数返回一个值,它必须是一个副本传递,除非它通过引用返回。因此,当发生这种情况时,该函数返回一个可以在以后修改的副本。因此,即使局部变量被声明为const,我也可以在另一个变量中读取它并轻松修改后者。
const int DoubleValue(int nX)
{
int nValue = nX * 2;
return nValue; // A copy of nValue will be returned here
} // n
我很困惑,想知道const
在这里的含义。函数体中是nValue
const吗?如果我像z = DoubleValue(x);
那样进行分配,我显然可以修改z
。
在什么情况下执行常量?对象DoubleValue(x)
是一个const对象吗?它代表什么?
答案 0 :(得分:7)
有一个极端情况,你返回一个const值将有所作为。如果我从Scott Meyers的一本书中正确记得,如果你重载一个运算符(比如说+)并且你返回的值不是const
,你可以做类似的事情:
A + B = C;
这不是您想要允许的内容。以下代码编译(但如果您在运算符中将A
替换为const A
,则不会):
#include <iostream>
class A
{
public:
A(int i): i_(i) {}
A operator +(A& rhs) { return A(i_ + rhs.i_); }
private:
int i_;
};
int main(int argc, char* argv[])
{
A a(1);
A b(2);
A c(3);
a + b = c;
return 0;
}