gpt4 book ai didi

c++ - 用花括号 C++ 实例化一个对象

转载 作者:可可西里 更新时间:2023-11-01 18:36:42 26 4
gpt4 key购买 nike

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

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 阅读更多相关信息.


I am used to doing

ArrayClass ac1 = new ArrayClass();

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

 ArrayClass* acPtr = new ArrayClass();

First of all is:

auto ac1 = ArrayClass{};

the same as

ArrayClass ac1 = ArrayClass{};

是的,是一样的。


Secondly,

Am I only allowed to use braces if I used an initialization list in my constructor?

是的。


And lastly, if I have parameters, is the following correct?

auto ac1 = ArrayClass{1,4,"hi", true};

如果出现以下情况,您可以使用该语法:

ArrayClass 至少有四个成员,
第一个成员可以使用1
初始化第二个成员可以使用4
进行初始化第三个成员可以使用"hi"
进行初始化第四个成员可以使用true
进行初始化任何其他剩余成员都可以进行值初始化。

您可以在 http://en.cppreference.com/w/cpp/language/value_initialization 阅读有关值初始化的更多信息.

关于c++ - 用花括号 C++ 实例化一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39887818/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com