为什么 "i=++i; "和 "i=++i+2; "是未定义行为?[重复]

问题描述 投票:0回答:1

我找到了这篇文章。https:/en.cppreference.comwcpplanguageeval_order。

我也不知道为什么 i = ++i;i = ++i + 2; 是未定义的行为。

第一个例子。

int i = 5;

i = ++i;

结果仍然是6.

如果 i = ++i; 被声明为未定义行为,那么 i = ++j; 也应该说明为未定义的行为(因为赋值可以发生在增量之前?

第二个例子。

int i = 5;

i = ++i + 2;

结果仍然是8。

如果 i = ++i + 2; 被声明为未定义行为,那么 i = ++j + 2; 也应该被声明为未定义行为(因为赋值可以发生在增量和总和之前)?

c undefined-behavior operator-precedence
1个回答
6
投票

是什么让 i = ++i; 未定义行为 是你试图同时读和写 i 在同一表达式中,没有序列点。

++ 操作符被认为是一种副作用,就像由 = 操作员。 在同一个对象上有两个副作用,或者在同一个对象上有一个副作用和一个读,才会引起问题。 任何可能的评估顺序都会产生同样的结果,这并不重要。

i = ++j; 是没有问题的,因为没有任何对象被写入一次以上,或者在同一个表达式中读和写都没有序列点。

© www.soinside.com 2019 - 2024. All rights reserved.