c++ - 函数返回的临时对象不总是右值吗?

标签 c++ rvalue-reference temporary-objects

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() 显然是一个匿名的临时对象,因此它应该是一个右值并且应该调用移动构造函数。为什么编译器将 *f() 视为左值?

是编译器的bug,还是我的理解有误?

最佳答案

f() 的结果是 Test* 类型的匿名临时对象。 f() is an rvalue .

*f() 通过所述指针执行间接寻址。与使用间接运算符时的情况一样,结果是左值。

关于c++ - 函数返回的临时对象不总是右值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10656795/

相关文章:

c++ - 如何安全地在模板数据上使用 std::move()

c++ - 将右值引用转换为临时参数的正确方法在 C++ 中返回 const 左值

c++ - 将 std::string 缓冲区转换为整数

c++ - 具有左值和右值的可变参数模板类构造函数

c++ - 为什么 bitand 没有正确解析以形成右值引用?

c++ - 强制执行参数评估顺序,同时保留表达式的生命周期

optimization - 保存计算值而不是多次重新计算的术语是什么?

c++ - 变量在 C++ 中如何以及在哪里可能没有关联的名称?

c++ - 从 vector 到链表 C++

c++ - 字符串 pop_back 函数错误