c – 按值返回总是const吗?

c – 按值返回总是const吗?,第1张

概述此代码无法编译: class C {};void foo (C& c) {}C bar() { return C(); }int main() { foo(bar());} 行foo(bar())中的编译错误(GCC 4.1.2): invalid initialization of non-const reference of type ‘C&’ f 此代码无法编译:

class C {};voID foo (C& c) {}C bar() { return C(); }int main()              {  foo(bar());}

行foo(bar())中的编译错误(GCC 4.1.2):

invalID initialization of non-const reference of type ‘C&’
from a temporary of type ‘C’

当bar()返回一个可变对象时,它应该编译…
为什么C不允许上面的代码?

编辑:我在an answer below总结了所有答案的所有好主意;-)

解决方法 这里适用的规则是您不能创建对临时对象的非const引用.如果foo被声明为foo(const C&),那么代码就可以了.

但是临时对象本身不是const;你可以在其上调用非const成员函数,例如bar().non_const_member_function().

使用C 11,可以编写foo以获取右值参考;在这种情况下,电话会没问题:

voID foo(C&&);foo(bar());  // okay
总结

以上是内存溢出为你收集整理的c – 按值返回总是const吗?全部内容,希望文章能够帮你解决c – 按值返回总是const吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1224448.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-05
下一篇2022-06-05

发表评论

登录后才能评论

评论列表(0条)

    保存