struct Test
{
Test()
{}
Test(const Test& other)
{
cout << "Copy" << endl;
}
Test(Test&& other)
{
cout << "Move" << endl;
}
};
Test* f()
{
static Test t;
return &t;
}
int main()
{
auto t = *f();
return 0;
}
输出是:复制
*f()
显然是一个匿名临时对象,因此它应该是一个 r 值并且应该调用移动构造函数。为什么编译器将*f()
其视为左值?
是编译器的错误,还是我的理解错误?