C / C ++ - 通过作为结构的一部分的值数组进行复制

时间:2017-05-17 13:14:19

标签: c++ arrays struct

考虑以下C ++结构:

typedef struct Person {
    std::string name;
    std::string children[MAX_NUM_CHILDREN];
} Person;

问题是,在以下情况中会发生什么:

void do_something(const Person& p) {
    Person person_copy = p;
}

问题是children p数组(实际上是类型std::string*的成员)是否将被复制为指针,或者是children中的每个字符串。 {1}}数组将使用复制构造函数按值复制吗?

2 个答案:

答案 0 :(得分:4)

  

[{1}} children数组p,实际上是std::string*类型的成员[...]

children是一个MAX_NUM_CHILDREN字符串数组,而不是指针。它的所有元素都将被person_copy.children的复制构造函数复制到Person

答案 1 :(得分:0)

我认为此示例中的数组不会衰减,因此内容将被复制。

T[]T*不同,但T[]可以衰减到T*(您可以查找数组衰减规则)。

您的Person结构应该被声明为:

struct Person {
    std::string name;
    std::string children[MAX_NUM_CHILDREN];
};

那更短,这就是C ++方式。

BTW,将调用复制构造函数,因为这是一个赋值初始化,但最好使用Person p(p2);(或Person p{p2}与C ++ 11兼容的编译器)初始化形式。