说我有一堂课:
class A
{
public:
A() {}
};
和一个功能:
void x(const A & s) {}
我这样做:
x(A());
有人可以向我解释有关通过引用传递临时对象的规则吗?就编译器允许的内容而言,您需要 const 的位置,是否发生隐式副本等。从玩耍中,您似乎需要 const 是有道理的,但是关于这一切是否有正式的规则?
谢谢!
有一条正式规则——C++ 标准(如果您有兴趣,请参见第 13.3.3.1.4 节)规定临时只能绑定到 const 引用——如果您尝试使用非 const 引用,编译器必须将其标记为一个错误。
Herb Sutter 在这里做了很好的解释:http ://www.gotw.ca/gotw/081.htm
x() 必须采用对临时 A 的 const 引用,或者 x() 必须采用 A 按值。