此代码不编译:
class C {};
void foo (C& c) {}
C bar() { return C(); }
int main()
{
foo(bar());
}
foo(bar())
行中的编译错误(GCC 4.1.2)
从临时类型“C”中初始化“C&”类型的非const引用无效
当bar()
返回mutable
对象时,它应该编译.
为什么C++不允许上面的代码?
编辑:,我在an answer below中总结了来自所有答案的所有好想法;-)
发布于 2012-11-14 19:13:46
这里适用的规则是,您不能创建对临时对象的非const引用。如果foo
被声明为foo(const C&)
,那么代码就可以了。
不过,临时对象本身并不是const;您可以在其上调用非const成员函数,例如bar().non_const_member_function()
。
使用C++11,可以编写foo以获取rvalue引用;在这种情况下,调用是可以的:
void foo(C&&);
foo(bar()); // okay
https://stackoverflow.com/questions/13385601
复制相似问题