1
2
我认为解决办法可能是用“++I”这个词。它表示“该值是操作数的新值;它是左值”。行为在5/4中被定义为“此外,只有确定要存储的值才能访问先前的值”。 所以,我们不是访问先前的,而是访问新的值。然后我们会好起来的。不过,这似乎是未定义行为和已定义行为之间的一条很细的线。 实际上,“先前值”在我看来就像“对象在先前序列点的值”。如果这样解释,那么这个结构看起来是未定义的。但是,如果我们直接比较5.3/2到5/4中“++i”的措词,我们会遇到“新值”和“先验值”,事情会“弯曲”到定义的行为(“++i”会在下一个序列点偷看“i”的值,并产生该值作为“++i”的结果左值的内容)。 |
2
1
C++ 5/4中的主要句子是
(约翰内斯引用的句子是下面的从属句子。)
您怀疑哪个标量对象的存储值在此处被多次修改?
(C标准中6.5/2中有类似的语言。) 编辑:
在重新阅读你的问题时,我认为困惑来自于一种困惑的思考方式
那么,谁在乎这种副作用是发生在(3)之前还是之后呢?表达式的值(即输入到(3)的值)已经确定。 |
rookie · 检查函数模板的所有参数包参数是否属于int 1 年前 |
ivaigult · -W转换和隐式字符串到布尔类型转换 1 年前 |
rainer · 后台插入程序的初始化 1 年前 |
Community wiki · 以理智、安全和高效的方式复制文件 1 年前 |
Shefali Kanaujia · 对C中向量的向量进行排序++ 1 年前 |
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |