考虑以下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}}数组将使用复制构造函数按值复制吗?
答案 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兼容的编译器)初始化形式。