A a("hello"); 这样构造的函数,“hello”,相当于char[]的变量,而你构造函数中用的是string类型形参,这样必定造成传递的参数类型不匹配。
当传递的类型不匹配时,以前的老版编译器可以自动创建临时变量,上述编译在老版中将可行,但现在新版的将出现编译错误;在当前的新版编译器中,只有用const修饰的引用时,才会创建临时变量,所以就出现题主那种状况。
如果用:
string str="hello";
A a(str); 这样不加const编译也行
或A a((string)"hello"); 这样也可行
你是不是直接使用字符串常量来初始化类,如
A a("hello");
由于这个构造函数传递的是引用,"hello"作为一个常量,类型是const string,通过引用传递的话,必须是常量引用。