xvalues,glvalues和prvalues的真实生活的例子?
我想知道是否有人能够说出或解释一些xvalues,glvalues和prvalues的真实生活的例子? 我读过类似的问题:
什么是右值,左值,左值,右值和左值?
但我不明白大家的意思。 任何人都可以解释在什么情况下,这些价值观是重要的,何时应该使用它们?
考虑以下课程:
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; } };
expression式some_foo.copy_of_name()
是一个prvalue ,因为copy_of_name
返回一个对象 ( std::string
),而不是一个引用。 每一个prvalue也是一个右值。 (右值更一般。)
expression式some_foo.original_name()
是一个左值 ,因为original_name
返回一个左值引用 ( std::string&
)。 每一个左翼也是一个滑轮。 (Glvalues更一般。)
expression式std::move(some_name)
是一个xvalue ,因为std::move
返回一个右值引用 ( std::string&&
)。 每个xvalue也是一个glvalue和一个rvalue。
请注意,对象和引用的名称总是左值:
std::string a; std::string& b; std::string&& c;
鉴于上述声明,expression式a
, b
和c
是左值。