带引号的临时对象和参数的规则

时间:2009-04-02 17:40:28

标签: c++ reference object temporary

说我上课了:

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

和一个功能:

void x(const A & s) {}

我做了:

x(A());

有人可以向我解释有关通过引用传递临时对象的规则吗?就编译器允许的内容而言,在需要const的地方,如果发生隐式副本等等。从游戏中看,你似乎需要有意义的const,但是有关于这一切的正式规则吗?

谢谢!

3 个答案:

答案 0 :(得分:9)

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

答案 1 :(得分:8)

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

答案 2 :(得分:1)

x()必须对常量A采用const引用,或者x()必须采用A按值。