【问题标题】:Modifying const returning from function [duplicate]修改从函数返回的 const [重复]
【发布时间】:2017-02-15 07:24:42
【问题描述】:

我认为我没有掌握返回 const 的正确想法。

如果我有一个返回 const 值的函数,是不是意味着我在返回它之后就无法更改该值?

为什么编译器允许我将 const 转换为非 const 变量?

或者它只适用于 const 指针?

const int foo(int index) {
    return ++index;
}

int main(){
    int i = foo(1); // why can I do this?
    ++i;

    return 0;
}

【问题讨论】:

  • 一个const int 可以很容易地被复制,当你将它分配给i 时会发生这种情况。 const 指针是不同的,因为您指向 at 的是 const,除非您有 const X* const,在这种情况下,指针和目标都是 const。有关更多说明,请参阅examples like this。在任何情况下返回 const int 都是毫无意义的,因为它们的复制成本太低了。
  • 那么按值返回 const 没用? @tadman
  • 是的,如果你要复制它几乎无关紧要。在不一定需要复制的地方返回 const 引用更为常见。
  • 这是重复的,我投票删除当前帖子。谢谢。

标签: c++


【解决方案1】:

你正在做相当于这个:

const int a = 42; // a cannot be modified
int b = a;        // b is a copy of a...
++b;              // and it can be modified

换句话说,您正在制作一个 const 对象的副本,并修改该副本。


请注意,返回 const 的值是有限的,嗯,值。对于内置类型,这并不重要。对于用户定义的类型,它可以阻止修改“临时”对象,但代价是阻止移动语义。从 C++11 开始,建议不要返回 const 值。

【讨论】:

    猜你喜欢
    • 2021-11-23
    • 2017-11-13
    • 1970-01-01
    • 2012-02-18
    • 2021-08-15
    • 2018-10-18
    • 1970-01-01
    • 2011-09-19
    相关资源
    最近更新 更多