【发布时间】:2015-10-16 14:34:53
【问题描述】:
我最近了解到通过简单的构造或赋值复制部分初始化的结构是undefined in C++。在 C 中是否也是如此,或者标准是否保证初始化和赋值的行为类似于 memcpy?
typedef struct { int i; int j; } A;
void foo() {
A x;
x.i = 0;
// Leave x.j indeterminate. Is the following well defined?
A y = x;
y.j = y.i + 1;
}
【问题讨论】:
-
C 中没有部分初始化的
structs。(想想你的问题的含义。)请注意,x.i = 0;不是初始化,而是赋值。 -
@Olaf:也许我的措辞不正确。
x.j至少是未指定的,不是吗? -
是的,因为您不初始化结构,而是将值分配给单个字段。但是这样的问题很有趣,尽管我不希望在这里有太多惊喜。为什么不对
x使用复合初始化器? -
@Olaf 我不建议编写这样的代码。我只对 C++ 的语言细节和兼容性问题感兴趣。
-
@precarious:在您的特定示例中,C11 草案标准的
Annex J.2: Undefined behavior就足够了:The value of an object with automatic storage duration is used while it is indeterminate (6.2.4, 6.7.9, 6.8).
标签: c language-lawyer c99 c11