隐式转换可能发生在对象的初始化中(包括由赋值间接产生的初始化),不可能由赋值直接产生
#include <iostream>
using namespace std;
class MyClass
{
public:
MyClass();
MyClass(int i);
MyClass(const MyClass &c);
~MyClass();
MyClass & operator = (const MyClass &c);
private:
int m_i;
};
MyClass::MyClass()
{
m_i = 0;
cout << "MyClass()" << endl;
}
MyClass::MyClass(int i)
{
m_i = i;
cout << "MyClass(int i)" << endl;
}
MyClass::MyClass(const MyClass &c)
{
m_i = c.m_i;
cout << "MyClass(const MyClass &c)" << endl;
}
MyClass::~MyClass()
{
}
MyClass & MyClass::operator =(const MyClass &c)
{
m_i = c.m_i;
cout << "operator =(const MyClass &c)" << endl;
return *this;
}
int main()
{
MyClass c1; // MyClass()
cout << "-------------------------------" << endl;
MyClass c2 = 2; // MyClass(int i) 隐式转换
cout << "-------------------------------" << endl;
MyClass c3 = c2;// MyClass(const MyClass &c) 隐式转换
cout << "-------------------------------" << endl;
c1 = 2; // MyClass(int i) 隐式转换
// operator =(const MyClass &c) 无隐式转换
cout << "-------------------------------" << endl;
c3 = c2; // operator =(const MyClass &c) 无隐式转换
cout << "-------------------------------" << endl;
return 0;
}
结果:
MyClass()
-------------------------------
MyClass(int i)
-------------------------------
MyClass(const MyClass &c)
-------------------------------
MyClass(int i)
operator =(const MyClass &c)
-------------------------------
operator =(const MyClass &c)
-------------------------------