相关疑难解决方法(0)

964
推荐指数
5
解决办法
11万
查看次数

默认构造函数是否始终初始化所有成员?

我发誓我不记得以前见过这个,我很难相信自己的眼睛:

非聚合类的隐式定义的默认构造函数是初始化其成员还是否?

在Visual C++中,当我运行这个看似无辜的代码时......

#include <string>
struct S { int a; std::string b; };
int main() { return S().a; }
Run Code Online (Sandbox Code Playgroud)

...令我惊讶的是,它返回一个非零值!但如果我删除字段b,则返回零.

我已经在VC++的所有版本上尝试了这个,我可以得到它,它似乎在所有这些上都这样做.

但是当我在Clang和GCC上尝试它时,无论我是在C++ 98模式还是C++ 11模式下尝试它,都会将值初始化为零.

什么是正确的行为?它不能保证为零吗?

c++ constructor initialization default-constructor visual-c++

15
推荐指数
2
解决办法
1636
查看次数