在原始类型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
返回的值分配给check
。 check
不是 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或非常量有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章