问题标签 [lvalue-to-rvalue]

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.

0 投票
3 回答
4413 浏览

c++ - 数组和右值

$4.2/1 - ““N T 数组”或“T 的未知边界数组”类型的左值或右值可以转换为“指向 T 的指针”类型的右值。结果是指向数组第一个元素的指针。”

除了在初始化/声明期间,我不确定我们如何获得数组类型的右值?

0 投票
3 回答
431 浏览

c++ - ISO C中数组的左值到右值转换

C++ ANSI ISO IEC 14882 2003 附录 C.1(第 668 页):

变化:条件表达式、赋值表达式或逗号表达式的结果可能是 bean 左值
理由:C++ 是一种面向对象的语言,相对更强调左值。例如,函数可能返回左值。
对原始特征的影响:改变定义明确的特征的语义。一些隐式依赖左值到右值转换的 C 表达式会产生不同的结果。例如,

在 C++ 和 C 中产生sizeof(char*)100.
...

我今天刚读到这篇文章,我记得几个月前我的一个朋友提出了一个问题,即编写一个函数,如果用 C++ 编译将返回 0,如果用 C 编译则返回 1。我解决了它利用了在 C 中结构位于外部范围内的事实。因此,考虑到这些新信息,我决定这将是上述问题的另一种解决方案,我在 Microsoft Visual Studio 2008 上尝试过,但无论它是编译为 C 还是 C++ 代码sizeof(0, arr)总是产生 4。所以 2 个问题:

1.什么是ISO C?它是当前的 C 标准吗?它是唯一的吗(我听说 C 正在迅速发展) 2. 这是微软 C++ 的错误吗?

TIA

编辑:抱歉混淆了输出并对其进行了编辑:

0 投票
2 回答
665 浏览

c++ - 我想我可能想出了一个数组类型右值的例子

C++03 §4.2 N°1:
“NT 数组”或“T 的未知边界数组”类型的左值或右值可以转换为“指向 T 的指针”类型的右值。结果是指向数组第一个元素的指针。

很长一段时间以来,这句话让我感到困惑的是,我不太明白数组类型的右值是什么意思。也就是说,我想不出一个类型是数组而结果是右值的表达式。我读了这个线程,它基本上问了同样的问题,接受的答案是“不,没有数组类型的右值”。我想我可能对此有矛盾。

C++03 §5.2.5 N°4:(关于表达式 E1.E2)
如果 E2 是非静态数据成员,并且 E1 的类型是“cq1 vq1 X”,并且 E2 的类型是“cq2 vq2 T”,表达式指定第一个表达式指定的对象的命名成员。如果 E1 是左值,则 E1.E2 是左值。

我假设否则它是一个右值(假设 E2 不是参考,这种情况由 覆盖§5.2.5 N°3),因此......

我在这里看到两个选项:
选项1:我是对的,万岁,是的,很酷。在这种情况下,问题是:还有其他例子吗?
选项2:我错了,在这种情况下,问题是:这是标准的缺陷吗?

我不知道 1,但我真的怀疑 2,因为当他们谈到函数到指针的转换时,他们只提到了函数类型的左值(很明显没有这样的右值)。因此,他们很可能已经考虑过数组类型的右值。

所以,基本上我的问题是我是否想出了一个数组类型的右值示例,如果没有,请提供一个有效的示例,我坚信存在。

0 投票
3 回答
872 浏览

c++ - 关于左值到右值的转换

“左值到右值的转换不是在一元 & 运算符的操作数上进行的。”

我可以知道这意味着什么>任何人都可以解释一下..请

前任:

0 投票
2 回答
1167 浏览

c++ - 关于左值到右值的转换,什么时候需要?

我在网上看了很多,似乎很多人提到了以下规则(但我在标准中找不到),

加法运算符 +(和所有其他二元运算符)要求两个操作数都是右值,结果是右值。等等..

我检查了 C++ 标准,它明确指出(第 3.10/2 条),

每当一个泛右值出现在预期纯右值的上下文中时,该泛左值就会被转换为一个纯右值

(第 5/9 条),

每当一个泛左值表达式作为操作数的操作数出现时,该操作数需要一个纯右值,左值到右值 (4.1)、数组到指针 (4.2) 或函数到指针 (4.3) 标准转换是应用于将表达式转换为纯右值。

它使用操作数“期望”一个纯右值的术语。但是,当我研究加法运算符、乘法运算符等时,它只提到结果是纯右值,但没有说明操作数“预期”是什么。

二元运算符是否真的期望操作数是纯右值在以下情况下会有所不同,

如果b期望是prvalue,这里会有一个lvalue到rvalue的转换,然后会执行prvalue + prvalue,返回一个prvalue,结果prvalue赋值给一个lvalue a。

但是,如果 b 不需要是纯右值,它将是左值 + 纯右值,结果是纯右值。

我真的很想知道标准在哪里明确或隐含地提到了不同运营商的规则?我检查了所有操作符部分,并且只有少数标准明确提到操作数和结果应该是左值还是右值。对于大多数运算符,该标准仅提及结果而不提及操作数要求。

谢谢。


顺便说一句,我在标准 5.19 中发现关于常量表达式的内容可能非常“隐含”地暗示二元运算符需要对操作数进行左值到右值的转换。更详细的可以参考我之前的问题,

混合使用 constexpr 和 const?

条件表达式是一个常量表达式,除非它涉及以下之一作为潜在评估的子表达式 (3.2)。

...

— 左值到右值的转换 (4.1),除非它应用于

———— 一个整数或枚举类型的左值,它引用一个非易失性的 const 对象,前面有初始化,用常量表达式初始化

谢谢阅读。

0 投票
2 回答
1052 浏览

c++ - 左值到右值的转换

从 4.1/2

左值指示的对象中包含的值是右值结果。当在 sizeof (5.3.3) 的操作数内发生左值到右值的转换时,不会访问包含在引用对象中的值,因为该运算符不会评估其操作数。

出于好奇,我想知道是否同样适用于 if、for、while 语句,即当评估语句的结果时,左值被转换为右值?

0 投票
5 回答
1380 浏览

c++ - 会发生左值到右值的转换吗?

C++ 标准 (4/5) 左值到右值的转换不是在一元 & 运算符的操作数上完成的。

例如:

在上述情况下,都是p&x值吗?或者什么是合适的例子?

编辑:

那这个呢?

我确定此语句中不会有任何转换,但我很困惑 & 运算符如何参与其中?

0 投票
2 回答
9714 浏览

c++ - C ++中的右值绑定混淆

我认为应该(大约)相同地对待三个函数调用,但显然它们不是。我试图理解为什么三个之一不能编译(g++ -std=c++0x)。

这个问题有点像 C++0x rvalue references - lvalues-rvalue binding,但是,如果它在那里得到了回答,我很抱歉,我无法将它提炼出来。

我想要的是能够用任何类型的字符串调用我的函数 bar() 并让它正常工作。定义就足够了void barR(const string &x),但我真的很想了解原因。

非常感谢您在理解第三次调用为何不同方面提供的任何帮助。

0 投票
2 回答
151 浏览

c - 当在 C 中发生 L-Value 到 R-Value 的转换时

如果左值出现在编译器需要右值的情况下,编译器会将左值转换为右值。

如果 T 不是函数或数组类型,则类型 T 的左值 e 可以转换为右值。转换后的 e 类型为 T。

有人可以告诉编译器何时需要 Rvalue 。或者什么是精确规则,以便将减少为 Lvalue 的表达式转换为 Rvalue。在 C 中,当我们尝试声明可变大小数组时

但是当我这样做的时候

当 Lvalue 到 Rvalue 转换发生时,它没有给出错误请有人详细说明?我的困惑是,在第一种情况下,在数组下标中它不会发生左值到右值的转换(在声明时),但在第二种情况下会发生

0 投票
2 回答
191 浏览

c - L 值到 R 值的转换

这里的网站说:http: //publib.boulder.ibm.com/infocenter/macxhelp/v6v81/index.jsp ?topic=%2Fcom.ibm.vacpp6m.doc%2Flanguage%2Fref%2Fclrc05lvalue.htm


问题1:

考虑以下程序,

我的问题是,为什么在表达式中(p++) ++(postfix)期望l-values和数组是l-value为什么会发生这个错误? gcc 错误:需要左值作为增量操作数|

问题2:

exception 3example?