返回const值的函数

gan*_*ddy 2 c++ const return

可能重复:
为了清楚起见,是否应使用返回类型的无用类型限定符?

我很困惑,按值返回并返回一个const值.例如,在功能完成后的任何功能中,所有本地人都超出范围.因此,如果我从函数返回一个值,它必须是一个副本传递,除非它通过引用返回.因此,当发生这种情况时,该函数返回一个可以在以后修改的副本.因此,即使局部变量被声明为const,我也可以在另一个变量中读取它并轻松修改后者.

const int DoubleValue(int nX)
{
    int nValue = nX * 2;
    return nValue; // A copy of nValue will be returned here
} // n
Run Code Online (Sandbox Code Playgroud)

我很困惑,想弄清楚const这里的意思.是nValueconst的函数体?如果我做了一个分配,就像在z = DoubleValue(x);,我可以明显地修改z.

在什么情况下执行常量?对象DoubleValue(x)是const对象吗?它代表什么?

Bor*_*der 7

有一个角落的情况,你返回一个const值将有所作为.如果我从Scott Meyers的一本书中正确记得,如果你重载一个操作符(比如+)并且你返回的值不是const你可以做的事情:

A + B = C;
Run Code Online (Sandbox Code Playgroud)

这不是你想要允许的.下面的代码编译(但如果你更换Aconst 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;
}
Run Code Online (Sandbox Code Playgroud)