2

说我有一堂课:

class A
{
 public:
 A() {}
};

和一个功能:

void x(const A & s) {}

我这样做:

x(A());

有人可以向我解释有关通过引用传递临时对象的规则吗?就编译器允许的内容而言,您需要 const 的位置,是否发生隐式副本等。从玩耍中,您似乎需要 const 是有道理的,但是关于这一切是否有正式的规则?

谢谢!

4

3 回答 3

9

有一条正式规则——C++ 标准(如果您有兴趣,请参见第 13.3.3.1.4 节)规定临时只能绑定到 const 引用——如果您尝试使用非 const 引用,编译器必须将其标记为一个错误。

于 2009-04-02T17:46:15.357 回答
8

Herb Sutter 在这里做了很好的解释:http ://www.gotw.ca/gotw/081.htm

于 2009-04-02T17:45:08.543 回答
1

x() 必须采用对临时 A 的 const 引用,或者 x() 必须采用 A 按值。

于 2009-04-02T17:45:49.197 回答