问题标签 [xvalue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 现代c++,对xvalue的理解
现代 C++ 只添加了一种新类型“xvalue”?函数返回的右引用是xvalue,this是定义的,就像函数参数中的右引用一样,只能绑定右值?这些理解正确吗?与此主题相关的问题和答案从学习者的角度处理此问题。这里我尝试从设计师的角度去了解这个话题。例如,int b =3;int&& x = std::move(b); std::move 的这个返回值是一个 xvalue,它可以绑定到 rreference,这是设计者设置的规则。(合理可用)。设计者还可以设置一个xvalue需要绑定左引用的规则,即使这不是一个好的规则。
c++ - “xvalue 有身份”是什么意思?
C++11 引入了新的值类别,其中之一是xvalue
.
Stroustrup 将其解释为类似于 ( im
category):“它是一个值,具有标识,但可以从中移出”。
另一个来源, cppreference解释说:
泛左值是一个表达式,其评估决定了对象、位域或函数的身份;
And xvalue
is a glvalue
,所以这 is 陈述也适用于xvalue
。
现在,我想如果 anxvalue
有身份,那么我可以检查两个xvalue
s 是否引用同一个对象,所以我取 an 的地址xvalue
。事实证明,这是不允许的:
xvalue
有身份是什么意思?
c++ - 分配了一个临时数组,但没有分配一个临时主值
我很惊讶这段C++
代码被编译了:
等效组件是
根据这段代码,定义了一个没有任何名称的数组,然后对其进行分配。
有趣的是,当没有数组时,代码不会编译:
1- 为什么在 C++ 中第一个表达式(也许你称之为分配给一个 xvalue)对于临时数组是合法的,但对于基本主类型不是第二个?为什么语言是这样设计的?
2-这种临时数组的应用是什么?
c++ - 这个表达式是 xvalue 吗?
C++ 标准对“xvalues”(N4762 § 7.2.1.4)有以下说明:
一个表达式是一个 xvalue,如果它是:
- 。. .
- 一个类成员访问表达式,指定一个非引用类型的非静态数据成员,其中对象表达式是一个 xvalue
考虑以下代码片段(使用 Boost 打印表达式的类型):
我的问题是关于表达式std::move(x).var
:
根据标准中的文本,我希望表达式是一个 xvalue,但输出是int
,而不是int &&
。
我在这里想念什么?
c++ - 右值的成员访问运算符应该是 xvalue 吗?
在cpprefernce 部分:值类别中,它声明“对象表达式的成员,其中 a 是右值,m 是非引用类型的非静态数据成员”是 xvalue。在标准中(我在:N4140,C++14 标准草案中找到)它声明(第 87 页)“如果表达式是 xvalue,则表达式是 xvalue……指定非静态数据成员的类成员访问表达式对象表达式是 xvalue 的非引用类型。”
我想用以下代码检查我对此的理解:
如果我的计算是正确的,那么B().i
是“对象表达式的成员,其中 [ B()
] 是一个右值”,并且根据引用该表达式应该是一个 xvalue,并且返回的类型decltype
应该是 int&&。请注意,我正在使用gcc version 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04)
,并且我尝试了没有标志和-std=c++14
.
(为了清楚起见,我也在检查我对“decltype”的理解,但我之前链接到的标准和参考文献一字不差地同意 decltype 的行为)。
抱歉,这不是问题……我说的对吗?是否应该更新参考以澄清这种行为?
c++ - 为什么临时延长寿命会导致多次调用析构函数?
考虑以下代码段:
当我跑TakeTemp(GetTemp());
的时候,输出看起来像
请注意,~Temp()
此处调用了两次(但仅构造了 1 个临时 obj)。这看起来很奇怪,因为 1) 返回的 temp 变量GetTemp()
的生命周期应该扩展到完整的表达式,以及 2) 由于我们temp
直接返回 in TakeTemp
,因此返回值优化将重用相同的对象。
谁能解释为什么这里有多个 dstor 调用?
(请注意,如果我们放置更多的 TakeTemp() 层,dstor 调用的数量会成比例地增长。)
c++ - 为什么函数调用是 xvalue(如果返回类型是 rvalue)?
假设我们有一个函数:
据我所知的表达式:
都是 xvalue。但为什么?为什么他们不是prvalue?我有点困惑。
c++11 - 我应该采取哪些步骤来确定表达式的值类别?
我对确定表达式的值类别感到很困惑。您能否提供确定表达式的值类别应采取的基本步骤(应分析什么)?
c++ - 什么是 C++ 中的 xvalues
我试图了解价值类别的差异,我发现了微软的这个文档。
为什么是xvalue
a glvalue
?他们为什么不说An xvalue is an glvalue or an rvalue
?在我看来,这句话是故意表达的,但我不明白为什么