这有效:
class Foo {};
void external_function(Foo&);
void f() {
Foo b;
external_function(b);
}
这不会:
class Foo {};
void external_function(Foo&);
void f() {
external_function(Foo());
}
铿锵声 说:
aac.cc:3:6: note: candidate function not viable: no known conversion from 'Derived' to 'Base &' for 1st argument;
GCC 实际上在以下方面更有帮助:
aac.cc:7:30: error: invalid initialisation of non-const reference of type ‘Base&’ from an rvalue of type ‘Derived’
Herb Sutter ( http://herbsutter.com/2008/01/01/gotw-88-a-candidate-for-the-most-important-const/ ) 说非常量引用不能用于右值,这在他的例子中是有道理的,但在我的例子中没有,因为对象在 external_function() 调用期间存在,不是吗?
我知道如何让它发挥作用;只需创建一个命名对象,使其不是右值(就像我在上面所做的那样),或者使用 const ref。但我想知道为什么不允许这样做,因为这对我来说似乎是安全的。