我最近了解到,通过简单的构造或赋值复制部分初始化的结构是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;
}
答案 0 :(得分:1)
x
未被部分初始化"这根本没有初始化。
在x
的初始化程序中阅读y
会传播"不确定"价值(如果可以这么说)到y
。如果int
可能在您的平台上有陷阱表示,则这已经是错误。
但是,你不会读到那个不确定的字段y.j
,所以在那个特定的任务中没有问题。