c – 按值返回总是const吗?
发布时间:2020-12-16 06:49:21 所属栏目:百科 来源:网络整理
导读:此代码无法编译: 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()返回一个
此代码无法编译:
class C {}; void foo (C& c) {} C bar() { return C(); } int main() { foo(bar()); } 行foo(bar())中的编译错误(GCC 4.1.2):
当bar()返回一个可变对象时,它应该编译… 编辑:我在an answer below总结了所有答案的所有好主意;-) 解决方法
这里适用的规则是您不能创建对临时对象的非const引用.如果foo被声明为foo(const C&),那么代码就可以了.
但是临时对象本身不是const;你可以在其上调用非const成员函数,例如bar().non_const_member_function(). 使用C 11,可以编写foo以获取右值参考;在这种情况下,电话会没问题: void foo(C&&); foo(bar()); // okay (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |