这些创建对象的方法有什么区别?

时间:2014-06-09 13:05:30

标签: c++ c++11 constructor

我有一个班级名称类型。 有什么区别:

1

Type t=a;

2

Type t(a);

'a'是某个变量。

之间有什么区别:

3

Type t;

4

Type t();

谢谢。

编辑: 有些答案相互矛盾。 有人有最终答案吗?

4 个答案:

答案 0 :(得分:8)

Type t=a;

这是复制初始化(§8.5/ 15)。它要求Type有一个非explicit构造函数接受a类型的参数,或a可隐式转换为的类型。

Type t(a);

这是直接初始化(§8.5/ 16)。 t可以从参数a构造,即使相应的构造函数是explicit

Type t;

t默认初始化(§8.5/ 12)。

Type t();

这是一个名为t的函数的函数声明,它按值返回Type(§8.5/ 11)。

答案 1 :(得分:2)

1) Type t=a; //复制初始化

2) Type t(a); //复制构造(采用具有相同类型a的参数的复制构造函数或构造函数)

然后:

1) Type t; //默认构造函数

2) Type t(); // 不是构造:函数t的声明,它不需要任何东西并返回Type

类型的对象

答案 2 :(得分:2)

1)

Type t=a;

称为复制初始化。标记explicit的构造函数不予考虑。

2)

Type t(a);

称为直接初始化。考虑所有构造函数,包括和不包含explicit关键字。

3)

Type t;

称为默认初始化。调用默认构造函数(一个没有参数或默认所有参数)。

4)

Type t();

声明一个返回t的函数Type。这被称为最令人烦恼的解析。 (Type t{};与#3默认初始化相同,但有一个可见的空参数列表。)

答案 3 :(得分:1)

Type t=a;Type t(a);都是相同的。如果type是默认类型,则两者都会调用复制构造函数。否则它是1参数构造函数的对象初始化 Type t;调用默认复制构造函数,而Type t();函数声明