gpt4 book ai didi

c++ - *&++i 会在 C++03 中导致未定义的行为吗?

转载 作者:IT老高 更新时间:2023-10-28 21:43:14 26 4
gpt4 key购买 nike

another answer据说在 C++11 之前,其中 i 是一个 int,然后使用表达式:

*&++i

导致未定义的行为。这是真的吗?

关于另一个答案,评论中有一些讨论,但似乎没有说服力。

最佳答案

*&++i 本身是否有UB 是没有意义的。延迟不一定访问 i 的存储值(之前的或新的),正如您可以通过使用它作为引用的初始化表达式看到的那样。只有在涉及右值转换(在这种情况下使用)时,才有任何问题需要讨论。然后,由于我们可以使用 ++i 的值,我们可以使用 *&++i 的值,但注意事项与 + 完全相同+i.

原来的问题本质上是i =++i,和i = *&++i是一样的。这是 C++03 中未定义的行为,因为 i 在序列点之间被修改了两次,并且在 C++11 中定义良好,因为赋值运算符的副作用被排序经过左右两边的值计算。

可能需要注意的是,C++98 和 C++03 标准中的非规范示例是不正确的,将一些正式未定义行为的情况描述为仅仅是未指定的行为。因此,意图一直没有完全清楚,一路回来。一个好的经验法则是不要依赖于语言的这种晦涩的角落案例,以避免它们:不需要成为语言律师就可以理解代码......

关于c++ - *&++i 会在 C++03 中导致未定义的行为吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28465121/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com