【发布时间】:2021-12-14 22:44:30
【问题描述】:
我已阅读有关未定义行为的信息。
This Link 说a[i] = a[i++] 导致未定义的行为。
但我不明白为什么输出
int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int i = 0;
cout << arr[++i] + ++i << " " << i;
是3 2
和输出
int arr[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int i = 0;
cout << ++i + arr[++i] << " " << i;
是4 2
【问题讨论】:
-
您是否也已经阅读过此stackoverflow.com/questions/949433/… ?
-
a[i] = a[i++]自 C++17 起定义良好 -
在任何情况下,一个 C++ 问题都不应该作为 C 问题的重复而关闭,因为排序规则不同'
-
我读过关于 UB。当您同时分配和递增时,它应该适用。但在这里,没有任务。而是使用 cout 递增和打印(未分配) i 的值。
-
"它应该在您同时分配和递增时应用。" - 不必要。看看undefined behavior in C and C++的第6个例子:没有赋值。
标签: c++ language-lawyer pre-increment