加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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):

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读