关于隐式变换、赋值重载的疑问

关于隐式转换、赋值重载的疑问直接上c++代码了。#include iostreamusing namespace stdclass A{private:i

关于隐式转换、赋值重载的疑问
直接上c++代码了。


#include <iostream>

using namespace std;

class A
{
private:
        int a;
public:
       void print(){a = 0;cout<<a;}
       void printa(){cout<<"printa"<<endl;}
       virtual ~A(){}
       
       A(int a){cout<<"constructor"<<endl;}
       A(A& a){cout<<"xxxx"<<endl;}
       A(){cout<<"ad"<<endl;}
       
       A operator=(char* a){cout<<"operator="<<endl; return *this;}
       //A operator=(A& a){cout<<"qwerty"<<endl; return *this;}              
};
int main(void)
{
  A a;
  a = 5;
  cin.get();
}

环境是win7 64位和dev c++
这个代码是对的,能运行通过,但如果加入注释行代码就会出错,显示5不能转换为char*型。

请问下:
1 注释行不加,执行过程是什么样的?
2 加入了注释行为嘛会出错?
[解决办法]
A & operator=(const A & a); //#1
A & operator=(int a); //#2

A a;
a = 5; //这时会调用#2,不存在二义性啊,函数优先匹配最符合的参数