C++ 用大括号C++;

C++ 用大括号C++;,c++,object,initialization,C++,Object,Initialization,我读过很多关于用大括号初始化的解释: 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: pos

我读过很多关于用大括号初始化的解释:

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{};
auto ac1 = ArrayClass{};

ArrayClass ac1 = ArrayClass{};
ArrayClass ac1 = ArrayClass{};
第二,

只有在构造函数中使用初始化列表时,才允许使用大括号吗

最后,如果我有参数,下面是正确的吗

auto ac1 = ArrayClass{1,4,"hi", true}
auto ac1 = ArrayClass{1,4,"hi", true};
谢谢你的帮助

auto ac1 = ArrayClass{};
在堆栈上进行分配,当堆栈消失时,该变量将自动清除

ArrayClass ac1 = new ArrayClass();
除非ArrayClass类型定义为指针,否则无效。无论如何,new ArrayClass()会在堆上分配内存,这些内存必须通过对其调用
delete
进行显式清理

auto ac1=ArrayClass{}

ArrayClass ac1 = ArrayClass{};
ArrayClass ac1 = ArrayClass{};
ArrayClass ac1=ArrayClass{}


是。

这种类型的初始化称为列表初始化。你可以在网站上阅读更多


我习惯于这样做

ArrayClass ac1 = new ArrayClass();

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

 ArrayClass* acPtr = new ArrayClass();

首先是:

auto ac1 = ArrayClass{};
auto ac1 = ArrayClass{};

ArrayClass ac1 = ArrayClass{};
ArrayClass ac1 = ArrayClass{};
是的,是一样的


第二,

只有在构造函数中使用初始化列表时,才允许使用大括号吗


最后,如果我有参数,下面是正确的吗

auto ac1 = ArrayClass{1,4,"hi", true}
auto ac1 = ArrayClass{1,4,"hi", true};
您可以在以下情况下使用该语法:

ArrayClass
至少有四个成员,
第一个成员可以使用
1

初始化 第二个成员可以使用
4

初始化 第三个成员可以使用
“hi”

初始化 第四个成员可以使用
true

初始化 可以初始化任何其他剩余成员的值

您可以在上阅读有关值初始化的更多信息