我想知道是否有人能够讲解一些关于xvalues、glvalues和prvalues的实际应用例子并解释它们。我已经阅读了一个类似的问题:
什么是 rvalues、lvalues、xvalues、glvalues 和 prvalues?
但我不理解每个人所说的意思。请问在什么情况下这些值很重要,以及何时应该使用它们?
我想知道是否有人能够讲解一些关于xvalues、glvalues和prvalues的实际应用例子并解释它们。我已经阅读了一个类似的问题:
什么是 rvalues、lvalues、xvalues、glvalues 和 prvalues?
但我不理解每个人所说的意思。请问在什么情况下这些值很重要,以及何时应该使用它们?
class MyClass {
private:
int num1, num2;
public:
MyClass(int n1, int n2) : num1(n1), num2(n2) {}
int getNum1() const { return num1; }
int getNum2() const { return num2; }
};
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也是一个rvalue。(rvalue更通用)some_foo.original_name()
是一个lvalue,因为original_name
返回一个左值引用(std::string&
)。每个lvalue也是一个glvalue。(glvalue更通用)std::move(some_name)
是一个xvalue,因为std::move
返回一个右值引用(std::string&&
)。每个xvalue也同时是一个glvalue和rvalue。std::string a;
std::string& b;
std::string&& c;
鉴于上述声明,表达式a
、b
和c
都是左值。
std::string const& reference_of_name() const
。这将是一个prvalue,对吗? - void.pointer