t3h*_*iel 7 c++ initialization object
我已经阅读了许多关于使用大括号初始化的解释:
PhoneNumber homePhone = {858, 555, 1234};
Run Code Online (Sandbox Code Playgroud)
以及
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)
Run Code Online (Sandbox Code Playgroud)
但是,我在这里遇到一些代码,我找不到一个例子,也许我不知道这个术语,所以我可以google它:
auto ac1 = ArrayClass{};
Run Code Online (Sandbox Code Playgroud)
我习惯了
ArrayClass ac1 = new ArrayClass();
Run Code Online (Sandbox Code Playgroud)
首先是:
auto ac1 = ArrayClass{};
Run Code Online (Sandbox Code Playgroud)
同样的
ArrayClass ac1 = ArrayClass{};
Run Code Online (Sandbox Code Playgroud)
其次,
如果我在构造函数中使用初始化列表,我是否只允许使用大括号?
最后,如果我有参数,以下是正确的吗?
auto ac1 = ArrayClass{1,4,"hi", true}
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助
这种初始化风格称为列表初始化。您可以在http://en.cppreference.com/w/cpp/language/list_initialization阅读更多相关信息。
我习惯做
Run Code Online (Sandbox Code Playgroud)ArrayClass ac1 = new ArrayClass();
这不是正确的 C++ 语法。您可以使用:
ArrayClass* acPtr = new ArrayClass();
Run Code Online (Sandbox Code Playgroud)
首先是:
Run Code Online (Sandbox Code Playgroud)auto ac1 = ArrayClass{};一样
Run Code Online (Sandbox Code Playgroud)ArrayClass ac1 = ArrayClass{};
是的,它是一样的。
其次,
如果我在构造函数中使用了初始化列表,我是否只允许使用大括号?
是的。
最后,如果我有参数,以下是否正确?
Run Code Online (Sandbox Code Playgroud)auto ac1 = ArrayClass{1,4,"hi", true};
您可以在以下情况下使用该语法:
ArrayClass具有至少四个成员,并且
所述第一构件可以使用初始化1,并且
所述第二构件可使用被初始化4,并且
第三部件可使用被初始化"hi",并且
该第四构件可使用被初始化true,以及
任何其余成员可以是值初始化。
您可以在http://en.cppreference.com/w/cpp/language/value_initialization阅读有关值初始化的更多信息。
auto ac1 = ArrayClass{};
Run Code Online (Sandbox Code Playgroud)
在堆栈上分配,当堆栈消失时,变量会自动清除。
ArrayClass ac1 = new ArrayClass();
Run Code Online (Sandbox Code Playgroud)
除非 ArrayClass 被类型定义为指针,否则无效。无论如何, new ArrayClass() 在堆上分配内存,必须通过调用delete它来显式清理该内存。
自动 ac1 = ArrayClass{};
与
ArrayClass ac1 = ArrayClass{};
是的。
| 归档时间: |
|
| 查看次数: |
3544 次 |
| 最近记录: |