从 4.1/2
左值指示的对象中包含的值是右值结果。当在 sizeof (5.3.3) 的操作数内发生左值到右值的转换时,不会访问包含在引用对象中的值,因为该运算符不会评估其操作数。
出于好奇,我想知道是否同样适用于 if、for、while 语句,即当评估语句的结果时,左值被转换为右值?
从 4.1/2
左值指示的对象中包含的值是右值结果。当在 sizeof (5.3.3) 的操作数内发生左值到右值的转换时,不会访问包含在引用对象中的值,因为该运算符不会评估其操作数。
出于好奇,我想知道是否同样适用于 if、for、while 语句,即当评估语句的结果时,左值被转换为右值?
是的。没有lvalue-to-rvalue
转换,它无法读取它的value。
松散地说,将lvalue视为某种容器,将rvalue视为容器中包含的值。
C++03,第 3.10/7 节读取,
每当左值出现在需要右值的上下文中时,左值就会转换为右值;见 4.1、4.2 和 4.3。
与§4.1/2(您的报价单)一起阅读,
左值指示的对象中包含的值是右值结果。
相关主题:
答案是肯定的。
当需要一个布尔右值时,也会应用转换。让 test 为变量以查看示例:
if( test )
测试的右值,真或假,在 if 内进行评估。