我已经阅读了许多关于用大括号初始化的解释:
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}
感谢您的帮助
答案 0 :(得分:4)
这种初始化方式称为 list-initialization 。您可以在http://en.cppreference.com/w/cpp/language/list_initialization了解更多信息。
我习惯做
ArrayClass ac1 = new ArrayClass();
这不是正确的C ++语法。您可以使用:
ArrayClass* acPtr = new ArrayClass();
首先是:
auto ac1 = ArrayClass{};
与
相同ArrayClass ac1 = ArrayClass{};
是的,它是一样的。
其次,
如果我在构造函数中使用了初始化列表,我是否只允许使用大括号?
是
最后,如果我有参数,以下是否正确?
auto ac1 = ArrayClass{1,4,"hi", true};
如果符合以下条件,您可以使用该语法:
ArrayClass
至少有四名成员,和
可以使用1
,和来初始化第一个成员
可以使用4
,和来初始化第二个成员
可以使用"hi"
,和来初始化第三个成员
可以使用true
,和来初始化第四个成员
任何其他剩余成员都可以初始化值。
您可以在http://en.cppreference.com/w/cpp/language/value_initialization阅读更多aboue 值初始化。
答案 1 :(得分:1)
auto ac1 = ArrayClass{};
在堆栈上分配,当堆栈消失时,变量会自动清除。
ArrayClass ac1 = new ArrayClass();
无效,除非ArrayClass是typedef'd指针。无论如何,新的ArrayClass()在堆上分配必须通过调用delete
来明确清理的内存。
auto ac1 = ArrayClass {};
与
相同ArrayClass ac1 = ArrayClass {};
是