【发布时间】:2016-09-06 03:04:13
【问题描述】:
编辑:尚未回答 - 链接的问题是关于普通 r 值的,如果相关的话,初始化列表是一个单独的概念。
这个语句是否定义良好,或者在初始化列表中使用前缀增量运算符,在列表中出现两次的变量上,未定义的行为?
struct T t = { i, ++i };
我对 ANSI C 最感兴趣,但了解其他版本的 C 和/或 C++ 是否不同也会很有用。如果像下面这样的类似结构是合法的:
struct T t = { i, i++ };
struct T t = { ++i, ++i };
struct T t = { i++, ++i };
struct T t = { i++, i++ };
【问题讨论】:
-
没有与初始化列表的组件关联的序列点,因此行为未定义。现在去寻找标准中说...的部分......
-
@πάντα ῥεῖ:嗯……那个重复的问题 (Why are these constructs (using ++) undefined behaviour?) 涵盖了很多领域,但是 AFAICS,它没有涵盖初始化的顺序,这可能会有所不同。具体来说,涵盖该行为的标准部分与该副本的任何答案中引用的任何部分都不相同。
-
@JonathanLeffler 我认为这是更好的选择:stackoverflow.com/questions/4176328/…:我们应该重新打开/关闭吗?
-
@RayHamel 有多个答案共同回答了您的问题。没有一个答案回答了您的整个问题。 SO 的目标之一是产生可以用一个确定性答案回答的问题:部分答案总比没有好,但并不理想。
标签: c++ c undefined-behavior initializer