我想知道是否有人可以告诉或解释一些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是左值.
| 归档时间: |
|
| 查看次数: |
4894 次 |
| 最近记录: |