In 另一个答案 https://stackoverflow.com/a/17400329/1505939据说在 C++11 之前,其中i
is an int
,然后使用表达式:
*&++i
导致未定义的行为。这是真的?
关于另一个答案,评论中有一些讨论,但似乎没有说服力。
问是否没有意义*&++i
本身就有IN。取消引用不一定访问存储的值(先前的或新的)i
,正如您通过使用它作为引用的初始值设定项表达式所看到的。仅当涉及右值转换(在这种情况下使用)时才存在任何需要讨论的问题。然后,由于我们可以使用++i
,我们可以使用的值*&++i
与完全相同的警告++i
.
原来的问题本质上涉及i = ++i
,这与i = *&++i
。这是 C++03 中未定义的行为,因为i
在序列点之间被修改两次,并且在 C++11 中定义良好,这是由于在左侧和右侧的值计算之后进行排序的赋值运算符的副作用。
也许值得注意的是,非规范性examples在 C++98 和 C++03 标准中,这些错误将某些正式未定义行为描述为仅仅是未指定的行为。因此,一直以来,其意图并不完全明确。一个好的经验法则是,不要依赖语言中这种晦涩的极端情况,而是要避免它们:人们不需要成为一名语言律师才能理解代码……
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)