同时使用char数组和=运算符

时间:2019-03-04 12:36:36

标签: c++ string copy

根据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

1 个答案:

答案 0 :(得分:0)

您在这里拥有的称为copy-initialization

A a = "qweqeasd";
  

如果T是一个类类型,而other类型的cv不合格版本是T或从T派生的类,则将检查T的非显式构造函数,并确定最佳匹配通过过载分辨率选择。 然后调用构造函数以初始化对象。

这里最匹配的是构造函数A(const char * ch),这就是为什么输出以contruct开头的原因。