为什么要调用这个构造函数?

use*_*567 2 c++

我对于关于它为什么调用第一个构造函数的程序感到困惑.

class A  
{  
public:  
        A(const char *c="\0")  
        {  
                cout<<"Constructor without arg";  
        }  
        A(string c)  
        {  
                cout<<"New one";  
        }  

};  

int main()  
{  
        A a="AMD";  
        return 0;  
}  
Run Code Online (Sandbox Code Playgroud)

输出是 Constructor without arg

Ree*_*sey 8

"AMD"是a const char[],它被隐式转换为const char*,所以第一个构造函数[ A(const char *c="\0")]是最佳匹配.

请注意,这A(const char *c="\0")不是没有参数构造函数,它是一个构造函数,它将单个const char*作为参数,并且具有可选的默认值,以便在const char*未指定a时使用.在这种情况下,你传递一个const char*,所以它使用它.

  • @Derek是的,初始化不是赋值. (3认同)
  • @Derek编写它是一种奇怪的方式,但它仍然会调用该构造函数. (2认同)
  • @Derek:他们非常相似,虽然不完全相同.`A a ="AMD";`要求带有`const char*`的构造函数必须是可访问的而不是`explicit`,并且复制构造函数是可访问的.它相当于:`A a(A("AMD"))`,但内部构造函数`A("AMD")`必须不是显式的.此外,编译器将在99%的情况下忽略额外的副本并生成相当于"A a("AMD")的代码;"**授予**以满足上述所有要求. (2认同)