- class A{
-
int a;
-
public:
- explicit A(int i):a(i){}
-
};
-
-
int main()
-
{
- A a(1),b(2);
-
a = b;
-
a = 2; //错误,不能隐式转换
-
return 0;
-
}
另外:上面的转换仅限于单参数的构造函数而言,多参数的构造类是不涉及这个问题的。即:a(1,2);是不会有隐形转化的问题的。
- A b(1);
-
A a = b; //这样才调用拷贝构造函数
-
A c = 2; //调用带int参数(有且仅有一个非缺省参数)的构造函数。
-
-
如果是这样:
-
A a(1),b(2),c(3);
-
a = b; //调用operator=()
-
a = 2; //调用operator=(),因为缺省的operator=的参数类型是(const &),所以这里有一个
- //隐式转换,构造出一个临时对象A(2),就从2转换到了A(2)。
- //operator=函数里处理的就是临时 对象A(2)。
-
//假如重载了operator=(int a),那就简单了。