经过一些调查,看起来行为初始化变量遵循一些约定.
对于单个元素:
auto* x = new int; // undefined value
auto* x = new int{}; // 0 (default initializer)
auto* x = new int(23); // 23 (copy initializer)
auto* x = new Test; // default constructor
auto* x = new Test{}; // default constructor
auto* x = new Test(...); // X constructor (overload-chosen)
Run Code Online (Sandbox Code Playgroud)
这很有意义,直到您尝试在数组上应用相同的逻辑:
auto* x = new int[10]; // all undefined values - OK
auto* x = new int[10]{}; // all 0 (default initializer) - OK
auto* x = …Run Code Online (Sandbox Code Playgroud) c++ ×1