[英]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.