18

是否int a=1, b=a++;调用未定义的行为?a的初始化及其在初始化程序中的访问和修改之间没有序列点干预b,但据我所知,初始化不是对象的“修改”;指定一个初始化器来给出对象的“初始值”。根据 6.7.8 初始化,第 8 段:

初始化器指定存储在对象中的初始值。

并且在对对象的任何访问之前将“初始”作为排序似乎是合理的。以前是否考虑过这个问题,是否有公认的解释?

4

1 回答 1

24

它不会调用未定义的行为。在 6.7.6 (3) 中规定

完整的声明器是不属于另一个声明器的声明器。完整声明符的结尾是一个序列点。

一个完整的声明符的结尾是一个序列点。

int a = 1, b = a++;
     //  ^ end of full declarator
于 2013-04-25T15:56:29.857 回答