请看以下两种创建Y类新对象的方法:
(1)
X x;
Y y(x);//explicit conversion
(2)
X x;
Y y = x;//implicit conversion
第一种方式使用显式转换,另一种使用隐式转化。但是,我不太明白它们是如何工作的。它们的区别是什么?有人可以解释为我?越详细越好。谢谢。
答案 0 :(得分:1)
第一个称为直接初始化,而第二个称为复制初始化。假设Y
有一个构造函数接受X
(或引用它), direct-initiazliation 将直接调用该构造函数,而不管构造函数是否标记为< EM>隐式。 复制初始化在语义上等同于:
Y y( implicit_conversion<Y>(x) );
也就是说,通过隐式转换到目标类型来转换参数,然后调用复制构造函数来初始化变量。在现实生活中,编译器将删除副本并转换代替目标变量,但编译器必须检查是否存在从X
到Y
的隐式转换,并且可以访问复制构造函数。
答案 1 :(得分:0)
实际上,两者都是隐式转换,假设您的类“Y”具有如下构造函数:
public:
Y(X &x)
具有单个参数的类构造函数将为您执行转换。
为避免隐式构建,请使用以下其中一种方法(根据您的具体情况,可能更适合您):
explicit
关键字