2

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

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

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

我对弄清楚const这里的含义感到困惑。函数体中有nValueconst 吗?如果我对 . 进行分配z = DoubleValue(x);,我显然可以修改z.

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

4

1 回答 1

7

在极端情况下,您返回一个 const 值会有所作为。如果我从 Scott Meyers 的一本书中没记错的话,如果你重载了一个运算符(比如 +)并且你返回的值不是const你可以做的事情:

A + B = C;

这不是你想要允许的。以下代码编译(但如果您在运算符中替换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;
}
于 2012-09-12T02:18:49.620 回答