- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我想知道是否有人可以讲述或解释一些 xvalues、glvalues 和 prvalues 的现实生活示例?我读过一个类似的问题:
What are rvalues, lvalues, xvalues, glvalues, and 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;
}
};
表达式 some_foo.copy_of_name()
是一个 prvalue,因为 copy_of_name
返回一个对象 (std::string
),而不是引用。每个prvalue也是一个rvalue。 (右值更通用。)
表达式 some_foo.original_name()
是一个左值,因为 original_name
返回一个左值引用 (std::string&
)。每个左值也是一个左值。 (Glvalues 更通用。)
表达式 std::move(some_name)
是一个 xvalue,因为 std::move
返回一个右值引用 (std::string&&
)。每个 xvalue 也是一个 glvalue 和一个 rvalue。
请注意,对象和引用的名称始终是左值:
std::string a;
std::string& b;
std::string&& c;
鉴于上述声明,表达式 a
、b
和 c
是左值。
关于c++ - xvalues、glvalues和prvalues的真实例子?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6609968/
[N4687] 3.9 [defns.dynamic.type] dynamic type 〈glvalue〉 type of the most derived object (4.5) to whi
我的代码如下: #include #include int main(){ for(int& v : std::vector{1,3,5,10}) { std::cout
我最近一直在仔细研究 C++ 类别。 lvalue 和 rvalue 之间的区别似乎很清楚,但是当谈到 prvalue 和 xvalue 时,我感到困惑。 给出下面的例子: #include usi
根据 this博客——我意识到这是旧的,如果它不再被认为是相关的,请告诉我——实现二元运算符的最佳方法如下... // The "usual implementation" Matrix operat
在 C++11 5.1 Primary Expressions 中声明: The type of [an id-expression] is the type of the identifier. T
对于这个问题的广泛性,我很抱歉,只是所有这些细节都是紧密相关的.. 我一直在努力理解具体两个值类别(xvalues 和 prvalues)之间的区别,但我仍然感到困惑。 无论如何,我试图为自己建立的关
有没有办法定义一个只处理 xvalue 或 prvalue 的函数(或者这里是异或)? 例如,假设我有一个方法 f(foo&& f),我如何声明 f 绑定(bind) xvalue 类型并拒绝 prv
几个星期以来,我一直在仔细研究右值和右值引用。我越来越有信心,我对以下两者之间的区别有了一定的了解: 定义变量或函数参数的类型(即 int x; 与 int && x = …; 表达式的表达式类别,包
这个问题是在我研究 decltype 行为及其派生表达式类型的规则时提出的。如果表达式是纯右值,是否有任何理由不提升通用 cv 限定符?类型。例如:- 在下面的代码中,表达式 i+j 是由declty
C++标准定义删除了以下函数; template void ref(const T&&) = delete; template void cref(const T&&) = delete; 这是为
What are rvalues, lvalues, xvalues, glvalues, and prvalues?很好地概述了右值/左值的分类,最近对该问题的回答之一 (https://stack
在 C++03 中,表达式可以是 rvalue 或 lvalue。 在 C++11 中,表达式可以是: 右值 左值 xvalue glvalue prvalue 两个类别变成了五个类别。 这些新的表达
decltype(1+2) 是否声明了一个 xvalue 或 prvalue? cppreference 说,decltype(expression) 将声明:1. T&& if expression
我是一名优秀的程序员,十分优秀!