GCC的zero-init与Clang的default-init差异及合规性问询
C++值初始化中的编译器行为差异与Bug疑问
场景1
代码示例:
struct A { A() {} int x; }; struct B : A { int y; }; int main() { B b {}; // b.x应该如何初始化? }
对B b {}的处理差异:
- GCC会对基类A执行零初始化
- Clang则对A执行默认初始化(即不初始化x)
查阅C++标准的「值初始化」和「零初始化」条款后,我认为GCC的行为符合标准,Clang存在Bug。
场景2
注释掉B的int y成员后:
代码示例:
struct A { A() {} int x; }; struct B : A { // int y; }; int main() { B b {}; }
此场景逻辑上应与场景1一致,但GCC的行为发生了变化:此时GCC和Clang均对A执行默认初始化而非零初始化,我怀疑两者都存在Bug。
请问上述情况是否确实属于需要上报的Bug?还是我遗漏了标准中的某些细节?
内容的提问来源于stack exchange,提问作者Ofek Shilon
相关产品推荐
相关产品推荐

