我知道在 c++03 中,非常量引用不能绑定到右值。
T& t = getT();
是无效的,在 c++11 中,我们可以这样做:T&& t = getT();
但是上面的代码呢,应该在 c++11 中工作吗?
我用vs11测试了下面的代码:
Foo getFoo() {
return Foo();
}
void fz(Foo& f) {
}
int getInt() {
return int();
}
void iz(int& i) {
}
int main() {
{
Foo& z = getFoo(); //ok
fz(getFoo()); //ok
int& z2 = getInt(); //error: initial value of reference to non-const must be an lvalue
iz(getInt()); //same as above
}
}
Foo
是一个自定义类,我不明白为什么前两行编译。临时引用的z
在main内部范围的末尾被破坏。标准对此有任何说明吗?
class Foo {
public:
Foo() {
std::cout << "constructed\n";
}
~Foo() {
std::cout << "destructed\n";
}
};
我刚刚看到一个类似的问题:一个 VS2010 错误?允许在没有警告的情况下绑定非常量引用到右值?