簡體   English   中英

C / C ++-通過作為結構一部分的值數組進行復制

[英]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;
}

問題是pchildren數組是否實際上將是std::string*類型的成員,將被復制為指針,還是將使用copy構造函數按值復制children數組中的每個字符串? ?

[...] pchildren級數組,實際上是std::string*類型的成員[...]

childrenMAX_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM