【发布时间】:2021-12-29 15:19:37
【问题描述】:
我正在尝试学习如何在以下情况(如下所示)中解释未定义行为的原因(如果有)。
int i = 0, *ptr = &i;
i = ++i; //is this UB? If yes then why according to C++11
*ptr = (*ptr)++; //i think this is UB but i am unable to explain exactly why is this so
*ptr = ++(*ptr); //i think this is not UB but can't explain why
我查看了许多 SO 帖子,描述了与上述情况类似的不同指针情况的 UB,但我仍然无法解释 为什么准确(例如 使用哪个点我们可以证明它们会导致 UB 的标准) 它们会导致 UB。
我正在寻找根据 C++11(或 C++14)而不是 C++17 和 Pre-C++11 的解释。
【问题讨论】:
-
你看过哪些帖子?您在参考的相应标准中发现了什么?
-
@UlrichEckhardt 比如this。当然还有其他的。但我故意没有在我的问题中提及每个单独的帖子,因为我想要一个单独的答案,并且想让我的问题简短而切题。
-
很棒的发现!它甚至为 C++11 提供了具体而详细的答案。我想知道您缺少哪些部分的解释...
-
@NathanOliver 是的,我已经阅读了您链接的那些帖子。我仍然想要一个单独的答案。无论如何,谢谢。
标签: c++ c++11 pointers undefined-behavior expression-evaluation