在我看来,能够将 r 值引用转换为 l 值引用,从而最终将临时值作为 l 值访问是没有意义的。例如:
struct S
{
int val=5;
};
void foo(S &&s)
{
S &s2=s;
s2.val=7
}
void foo2(S &s2)
{
s2.val=7
}
int main()
{
foo(S()); // This is fine
foo2(S()); // Error: Even though this is logically equivalent to foo()
}
调用foo()
似乎在 C++ 中有效,或者至少它使用 gcc 4.7.1 编译。调用foo2()
不是,即使这两个函数在逻辑上看起来是等价的。是什么赋予了?