以下程序:
#include
<
iostream
>
using namespace std;
class A{
public :
A(){cout << " A() " << endl;}
A( const char * c){cout << " A(const char *c) " << endl;}
A & operator = ( const char * c){cout << " A operator=(const char *c) " << endl;}
A & operator = ( const A & a){cout << " A operator=(const A &a) " << endl;}
private :
A( const A & a){cout << " A(const A &a) " << endl;}
};
int main()
{
A a( " abc " ); // OK
// A a2=A("abc"); // Error
// A a3="abc"; // DevCpp里Error,VC2005里正常
system( " pause " );
}
using namespace std;
class A{
public :
A(){cout << " A() " << endl;}
A( const char * c){cout << " A(const char *c) " << endl;}
A & operator = ( const char * c){cout << " A operator=(const char *c) " << endl;}
A & operator = ( const A & a){cout << " A operator=(const A &a) " << endl;}
private :
A( const A & a){cout << " A(const A &a) " << endl;}
};
int main()
{
A a( " abc " ); // OK
// A a2=A("abc"); // Error
// A a3="abc"; // DevCpp里Error,VC2005里正常
system( " pause " );
}
《C++Primer》3版P569说的有点不正确,若将拷贝构造函数声明为私有的,则不一样了。
不明白的是,对于A a3="abc";两种编译器表现了不同的结果