xvalues,glvalues和prvalues的真实例子?

M3t*_*0it 52 c++ c++11

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

什么是右值,左值,x值,glvalues和prvalues?

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

fre*_*low 55

考虑以下课程:

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;
    }
};
Run Code Online (Sandbox Code Playgroud)

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

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

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


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

std::string a;
std::string& b;
std::string&& c;
Run Code Online (Sandbox Code Playgroud)

鉴于上述声明,表达a,b并且c是左值.