在原始类型c ++中返回const或非常量有啥区别[重复]

Posted

技术标签:

【中文标题】在原始类型c ++中返回const或非常量有啥区别[重复]【英文标题】:what is the difference returning const or non-const in primative types c++ [duplicate]在原始类型c ++中返回const或非常量有什么区别[重复] 【发布时间】:2013-10-25 07:49:53 【问题描述】:

我试图了解如果我添加 const 或在返回函数时忽略它会有什么不同。让我通过一个例子来解释我的问题。

const int foo()

    return 3;


int main()

    int check;
    check=foo();
    cout<<"before:"<<check<<endl;
    check=1;
    cout<<"after:"<<check<<endl;
    return 0;   

到目前为止,我一直认为,由于我编写了 const foo(),我无法更改检查变量,但是我编译它并没有出错。

我想知道在我的 foo() 函数之前写 const 会得到什么或失去什么。

提前致谢

【问题讨论】:

曾经建议这样做,以避免意外分配给返回的临时:foo() = 10; // fails to compile。现在建议不要这样做,因为它禁止移动语义(即,这意味着您必须将整个返回的临时复制到某个局部变量中,而不是窃取它。并不是说它在原始情况下有所不同,而是作为一般规则很好)。在您的情况下,check 不是const,并且被赋予与foo 临时返回的const 相同的 ***.com/questions/10177904/… 可能重复 对于“可能”的相当严格的定义 - 这完全是一个骗局。 【参考方案1】:

原始返回类型上的 const 修饰符将被忽略。

另请参阅此问题:Should I return const objects?

【讨论】:

【参考方案2】:

您没有更改变量。您正在更改它的副本。

check=foo();

foo 返回的值分配给checkcheck 不是 const

【讨论】:

【参考方案3】:

不同之处在于编译器警告:

warning: type qualifiers ignored on function return type [-Wignored-qualifiers]
const int foo()
              ^

见live demo。

这种东西被忽略了,所以没有效果。

【讨论】:

不同之处在于警告......非常糟糕的描述。你应该说为什么会抛出警告...... @Zaibis 如果您真的阅读了警告,它会告诉您原因。 所以无论如何你应该提一下发生这种情况的原因是什么。 @Zaibis 所以我应该解释一下为什么编译器遵循标准?原始类型的限定符被忽略。没有更多的了...... 不,但你可以补充说这是标准的一部分,或者只是说它必须是这样的,因为我敢打赌,有人问像 OP 这样的问题并不能确认符合标准,所以它会帮助一些人;)【参考方案4】:

当您尝试返回参考时会有所不同。

例如:

int gGlobal;

const int & func()

    return gGlobal;


int main ()

     //Following statement will give error.
     func() = 3;
     return 0;

【讨论】:

那是完全不同的事情。 @jrok:当然不是,他是对的。 @DídacPérez 他是对的,但这与 OP 问题无关。

以上是关于在原始类型c ++中返回const或非常量有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章

C语言中void main和int main有啥区别

Objective-C/Swift中定义常量有啥区别?

C语言中int和float有啥区别啊

退出和返回有啥区别? [复制]

C语言中signed char和char有啥区别? [复制]

C++ 成员引用基类型'Vertex *const'不是结构或联合