返回常量值的函数

Functions returning a const value

本文关键字:函数 常量 返回      更新时间:2023-10-16

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

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

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

我弄不清楚const在这里是什么意思。函数体中的nValue是常量吗?如果我对进行赋值,就像在z = DoubleValue(x);中一样,我显然可以修改z

惊愕是在什么情况下实施的?对象DoubleValue(x)是常量对象吗?它代表什么?

有一种情况,返回常量值会产生影响。如果我在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;
}