如果'Test'是一个普通的类,那么之间有什么区别:
Test* test = new Test;
Run Code Online (Sandbox Code Playgroud)
和
Test* test = new Test();
Run Code Online (Sandbox Code Playgroud) 我发誓我不记得以前见过这个,我很难相信自己的眼睛:
非聚合类的隐式定义的默认构造函数是初始化其成员还是否?
在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++