繁体   English   中英

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

[英]What is the difference between those ways to create an object?

我有一个类名Type。 之间有什么区别?

1。

Type t=a;

2。

Type t(a);

其中“ a”是一些变量。

和之间有什么区别:

3。

Type t;

4。

Type t();

谢谢。

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

Type t=a;

这是副本初始化 (第8.5 / 15节)。 它要求Type具有一个非explicit构造函数,该构造函数接受a是任何类型或a可以隐式转换为的类型的参数。

Type t(a);

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

Type t;

t将被默认初始化 (第8.5 / 12节)。

Type t();

这是名为t的函数的函数声明,该函数按值返回Type (第8.5 / 11节)。

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

2)输入 Type t(a); //复制结构(拷贝构造或构造函数具有相同类型的参数a

接着 :

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

2)输入 Type t(); // 不是构造 :函数t的声明带任何内容并返回Type类型的对象

1)

Type t=a;

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

2)

Type t(a);

称为直接初始化。 考虑所有构造函数,无论是否使用explicit关键字。

3)

Type t;

称为默认初始化。 调用默认的构造函数(不带参数或默认所有参数的构造函数)。

4)

Type t();

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM