【问题标题】:Functions returning a const value [duplicate]返回常量值的函数[重复]
【发布时间】:2012-09-12 01:53:39
【问题描述】:

可能重复:
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

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

【问题讨论】:

标签: c++ return constants


【解决方案1】:

在极端情况下,您返回一个 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;
}

【讨论】:

  • 我认为允许A + B = C 没有问题,因为无论如何你都不想
  • @YvesgereY 这正是你应该禁止它的原因。
  • “A + B = C”当然是我允许的,这取决于它的含义:) 表达式模板以大量的生成能力来做这样的事情
  • @sehe 你介意给好奇的人举个例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 2015-07-21
  • 2018-05-14
  • 1970-01-01
  • 2014-10-12
  • 2021-07-02
  • 1970-01-01
相关资源
最近更新 更多