在复制构造函数和转换构造函数之间混淆

时间:2013-08-23 14:35:35

标签: c++ constructor c++03

由于我对这个问题有疑问(对于C ++ 03)我在这里发布它。我只是阅读了转换构造函数,它说明了

  

“要成为转换构造函数,构造函数必须具有单个   参数和声明没有关键字显式。“

现在我的问题是复制构造函数是否可以被称为转换构造函数,前提是它没有显式声明?它有资格成为一个吗? 我相信它不能被称为转换构造函数,因为它只接受相同的类型参数,导致无转换。对于实例

foo a;
foo b;
a = 100; //a Conversion constructor would be called (i.e) foo(int a){...}
a = b ;  //Since both objects are same type and have been initialized the assignment operator will be called (if there is an overloaded version otherwise the default will be called)

我的理解是否正确?

2 个答案:

答案 0 :(得分:10)

引用标准:

[class.conv.ctor] / 3

  

非显式复制构造函数(12.8)是转换构造函数。隐式声明的复制构造函数不是显式构造函数;可以调用它来进行隐式类型转换。

所以,是的,复制者是转换者。

另请注意[conv] / 1,它在一条评论中指明并指出:

  

注意:标准转换序列可以为空,即它可以不包含转换。

和/ 3:

  

当且仅当声明e格式正确时,表达式T才能隐式转换为T t=e;类型

因此隐式转换集包含空转换。

答案 1 :(得分:1)

是的,复制构造函数就是它 - 一个复制构造函数。这不是从一种类型转换为另一种类型的转换构造函数。