根据C ++入门5th中的解释。
使用char数组并使用=
初始化一个字符串
操作员。实际上,它将做以下两件事:
1:调用构造函数,该构造函数接受const char *
来创建临时string object
。
2:调用复制构造函数以初始化true变量;
第13.1章618页
字符串null_book =“ 9-999-99999-9”; //复制初始化
我做了一个测试。似乎当我用cahr数组启动A对象时。 复制构造函数从未被调用过。
#include <iostream>
int b =5;
using namespace std;
class A
{
public:
A(const char * ch) :chr(*ch) {cout << "contruct ";};
A(const A & a) : chr(0) {cout << "copy_construc ";::b = 2;} ;
A &operator=(const A & a) {cout << "assignment"; return *this;};
char chr;
};
int main() {
A a = "qweqeasd";
cout << b;
cout << a.chr;
A c = A("wrwsx");
cout << b;
cout << c.chr;
}
输出:
contruct 5qcontruct 5w
答案 0 :(得分:0)
您在这里拥有的称为copy-initialization。
A a = "qweqeasd";
如果
T
是一个类类型,而other类型的cv不合格版本是T或从T派生的类,则将检查T
的非显式构造函数,并确定最佳匹配通过过载分辨率选择。 然后调用构造函数以初始化对象。
这里最匹配的是构造函数A(const char * ch)
,这就是为什么输出以contruct
开头的原因。