我已经阅读了很多关于使用花括号进行初始化的解释:

PhoneNumber homePhone = {858, 555, 1234};


int x2 = val; // if val==7.9, x2 becomes 7 (bad)

char c2 = val2; // if val2==1025, c2 becomes 1 (bad)

int x3 {val}; // error: possible truncation (good)

char c3 {val2}; // error: possible narrowing (good)

char c4 {24}; // OK: 24 can be represented exactly as a char (good)

char c5 {264}; // error (assuming 8-bit chars): 264 cannot be
               // represented as a char (good)

但是,我在这里遇到了一些无法找到示例的代码,也许我不知道该术语,所以我可以对其进行谷歌搜索:
auto ac1 = ArrayClass{};

我已经习惯了
ArrayClass ac1 = new ArrayClass();

首先是:
auto ac1 = ArrayClass{};

与...相同
ArrayClass ac1 = ArrayClass{};

第二,

如果我在构造函数中使用了初始化列表,是否只能使用花括号?

最后,如果我有参数,以下内容正确吗?
auto ac1 = ArrayClass{1,4,"hi", true}

感谢您的帮助

最佳答案

这种初始化方式称为列表初始化。您可以在http://en.cppreference.com/w/cpp/language/list_initialization上阅读更多内容。


那是不正确的C++语法。您可以使用:

 ArrayClass* acPtr = new ArrayClass();


是的,是一样的。


是的。


您可以在以下情况下使用该语法:ArrayClass至少有四个成员
可以使用1初始化第一个成员
可以使用4初始化第二个成员
可以使用"hi"初始化第三个成员
可以使用true初始化第四个成员
其余的任何其他成员都可以进行值初始化。
您可以在http://en.cppreference.com/w/cpp/language/value_initialization上了解有关值初始化的更多信息。

10-08 08:54