[英]C/C++ - copying by value arrays that are part of structs
考慮以下C ++結構:
typedef struct Person {
std::string name;
std::string children[MAX_NUM_CHILDREN];
} Person;
問題是,在以下情況下會發生什么:
void do_something(const Person& p) {
Person person_copy = p;
}
問題是p
的children
數組是否實際上將是std::string*
類型的成員,將被復制為指針,還是將使用copy構造函數按值復制children
數組中的每個字符串? ?
[...]
p
的children
級數組,實際上是std::string*
類型的成員[...]
children
是MAX_NUM_CHILDREN
字符串的數組,而不是指針。 Person
的copy構造函數會將其所有元素復制到person_copy.children
。
我不認為在此示例中數組會衰減,因此內容將被復制。
T[]
和T*
不同,但是T[]
可以衰減到T*
(您可以查找數組衰減規則)。
您的Person
結構應該這樣聲明:
struct Person {
std::string name;
std::string children[MAX_NUM_CHILDREN];
};
那更短,這就是C ++的方式。
順便說一句,將調用復制構造函數,因為這是一個賦值初始化,但最好使用Person p(p2);
(或具有C ++ 11兼容編譯器的Person p{p2}
)初始化表格。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.