防止隐式转换 class A{ int a; public: explicit A(int i):a(i){} }; int main() { A a(1),b(2); a = b; a = 2; //错误,不能隐式转换 A c = 2; //错误 return 0; } 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),那就简单了。 如果重载为A &operator=(int),a=b不会出错,因为缺省的A & operator=(const A&)会起作用