如果从左到右和从右到左 - 操作员的相关性都存在于一个页面中那么将考虑什么?

Abd*_*yan 5 c associativity

int i=-1;
int a=65;
int b=a*i + ++i;
Run Code Online (Sandbox Code Playgroud)

b的价值是多少?这里,=,+的关联性是从左到右,*,前缀增量(++)的关联性是从右到左.

那么对于int b = a*i + ++ i,我应该考虑什么样的评估顺序;

左到右?右到左?为什么?

hac*_*cks 5

不要考虑相互关系.考虑评估的顺序,遗憾的是在这种情况下它是未定义的.
在表达中

int b=a*i + ++i;   
Run Code Online (Sandbox Code Playgroud)

您正在修改i以及在调用未定义行为的同一表达式中使用它.

C99指出:

在前一个和下一个序列点之间,对象的存储值最多只能通过表达式的计算来修改一次.此外,只能访问先前值以确定要存储的值.

我还建议你阅读c-faq:Q 3.8.

  • @Shahbaz:"调用未定义的行为"是一种(甚至是'the')传统的方式来描述当程序执行标准指定为导致"未定义行为"的事情时会发生什么.我用这个词; 我将继续使用这个词.它比大多数的迂回更方便. (2认同)