
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吗?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)