xvalues,glvalues和prvalues的真实例子?

时间:2011-07-07 11:36:48

标签: c++ c++11

我想知道是否有人可以讲述或解释一些xvalues,glvalues和prvalues的真实例子?我读过类似的问题:

What are rvalues, lvalues, xvalues, glvalues, and prvalues?

但我不明白每个人的意思。任何人都可以解释这些值在什么情况下很重要,何时应该使用它们?

1 个答案:

答案 0 :(得分:50)

考虑以下课程:

class Foo
{
    std::string name;

public:

    Foo(std::string some_name) : name(std::move(some_name))
    {
    }

    std::string& original_name()
    {
        return name;
    }

    std::string copy_of_name() const
    {
        return name;
    }
};

表达式some_foo.copy_of_name() prvalue ,因为copy_of_name 会返回一个对象std::string),而不是引用。每个prvalue也是一个右值。 (Rvalues更一般。)

表达式some_foo.original_name()左值,因为original_name 返回左值引用std::string&)。每个左值也是一个glvalue。 (Glvalues更通用。)

表达式std::move(some_name) xvalue ,因为std::move 返回右值引用std::string&&)。每个xvalue也都是glvalue和rvalue。


请注意,对象和引用的名称始终是左值:

std::string a;
std::string& b;
std::string&& c;

鉴于上述声明,表达式abc是左值。