C++ 构造函数语法和零初始化
C++ constructor syntax and zero-initialization
这是一个关于 c++ 语法的小问题:
class arrayInit {
public:
bool vars[2];
arrayInit() : vars() {} //1
};
class array {
public:
bool vars[2];
array() {} //2
};
1 和 2 是做什么的?
为什么他们不像这样进行零初始化:bool vars[2]={};
?
arrayInit() :
和 array()
的目的是什么?它叫什么,所以我可以搜索它?
来自:https://msujaws.wordpress.com/2010/06/16/initializing-an-array-in-c/
arrayInit()
和 array()
都是默认构造函数。如果缺少默认构造函数而其他构造函数可用,则不能在不调用其他构造函数的情况下从该 class 类型声明对象,例如如果没有默认构造函数,你不能这样做 arrayInit arr;
。
: vars()
部分称为初始化列表。您可以在 link 中阅读更多关于它们的信息:http://en.cppreference.com/w/cpp/language/initializer_list
What does 1 and 2 do?
1 和 2 都为各自的类型定义了默认构造函数
Why they don't zero initialize like this: bool vars[2]={};?
如果他们使用支持 c++11 的编译器,他们可以。另外 var() 将 value 初始化 与 vars[2] = {} 相同的数组将显式初始化所有元素为 false
What is the purpose of arrayInit() : and array()? and what is it
called so I could search for it?
它们被称为默认构造函数。 C++ 编译器会为你创建它们,除非你想对它们做一些特殊的事情。如果您提到的是写在 :(冒号)之外的内容,则该表达式称为 initializer list
阅读更多here
What does 1 and 2 do?
两者都允许您覆盖数组的默认初始化。
InitArray 专门初始化没有参数的 vars 数组,我相信它会假设 0 作为默认参数。
Array 并没有专门初始化数组,所以它会退回到默认的初始化情况。
Why they don't zero initialize like this: bool vars[2]={};?
您可以这样做,这只是将 bool 数组封装在 class 中的另一个选项,以便您可以根据需要提供其他功能。
What is the purpose of arrayInit() : and array()?
如果需要默认功能,则无需将数组封装在自己的 class 中。封装允许您封装一个类型以提供与默认功能不同的功能,您可以继续添加加法、减法或任何您能想到的方法,并让它以您指定的方式执行这些方法。
and what is it called so I could search for it?
问得好;封装,class初始化,数组初始化。
http://www.cplusplus.com/doc/tutorial/classes/
这是一个关于 c++ 语法的小问题:
class arrayInit {
public:
bool vars[2];
arrayInit() : vars() {} //1
};
class array {
public:
bool vars[2];
array() {} //2
};
1 和 2 是做什么的?
为什么他们不像这样进行零初始化:bool vars[2]={};
?
arrayInit() :
和 array()
的目的是什么?它叫什么,所以我可以搜索它?
来自:https://msujaws.wordpress.com/2010/06/16/initializing-an-array-in-c/
arrayInit()
和 array()
都是默认构造函数。如果缺少默认构造函数而其他构造函数可用,则不能在不调用其他构造函数的情况下从该 class 类型声明对象,例如如果没有默认构造函数,你不能这样做 arrayInit arr;
。
: vars()
部分称为初始化列表。您可以在 link 中阅读更多关于它们的信息:http://en.cppreference.com/w/cpp/language/initializer_list
What does 1 and 2 do?
1 和 2 都为各自的类型定义了默认构造函数
Why they don't zero initialize like this: bool vars[2]={};?
如果他们使用支持 c++11 的编译器,他们可以。另外 var() 将 value 初始化 与 vars[2] = {} 相同的数组将显式初始化所有元素为 false
What is the purpose of arrayInit() : and array()? and what is it called so I could search for it?
它们被称为默认构造函数。 C++ 编译器会为你创建它们,除非你想对它们做一些特殊的事情。如果您提到的是写在 :(冒号)之外的内容,则该表达式称为 initializer list
阅读更多here
What does 1 and 2 do?
两者都允许您覆盖数组的默认初始化。 InitArray 专门初始化没有参数的 vars 数组,我相信它会假设 0 作为默认参数。 Array 并没有专门初始化数组,所以它会退回到默认的初始化情况。
Why they don't zero initialize like this: bool vars[2]={};?
您可以这样做,这只是将 bool 数组封装在 class 中的另一个选项,以便您可以根据需要提供其他功能。
What is the purpose of arrayInit() : and array()?
如果需要默认功能,则无需将数组封装在自己的 class 中。封装允许您封装一个类型以提供与默认功能不同的功能,您可以继续添加加法、减法或任何您能想到的方法,并让它以您指定的方式执行这些方法。
and what is it called so I could search for it?
问得好;封装,class初始化,数组初始化。
http://www.cplusplus.com/doc/tutorial/classes/