6

因为我对这个问题(对于 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)

我的理解正确吗?

4

2 回答 2

10

引用标准:

[class.conv.ctor]/3

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

所以是的,copy-ctor 是一个转换 ctor。

另请注意 [conv]/1 在备注中指定并指出:

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

在 /3 中:

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

所以这组隐式转换包含空转换。

于 2013-08-23T14:49:26.873 回答
1

是的,拷贝构造函数就是它的本质——拷贝构造函数。这不是从一种类型转换为不同类型的转换构造函数。

于 2013-08-23T14:46:54.727 回答