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

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

我找到了这篇文章:https://en.cppreference.com/w/cpp/language/eval_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;也应被声明为未定义的行为(因为赋值可能在增量和求和之前发生?

我发现了这篇文章:https://en.cppreference.com/w/cpp/language/eval_order我不知道为什么我= ++ i;和i = ++ i + 2;是未定义的行为。第一个例子:int i = 5; i = ++ i;结果将...

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

使i = ++i; undefined behavior产生的原因是,您试图在同一表达式中读取和写入i而没有序列点。

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