簡體   English   中英

const和非復制構造函數中的const?

[英]const and not const in copy constructor?

當我寫我的復制構造函數時:(HocSinh是一個類)

HocSinh::HocSinh(HocSinh &a)
{
    hoTen = a.hoTen;
    diemVan = a.diemVan;
    diemToan = a.diemToan;
}

然后:

HocSinh hocSinh("abc", 1, 2);
vector <HocSinh> dsHSCanTim;
dsHSCanTim.push_back(hocSinh);

我收到一個錯誤:“沒有可用的復制構造函數或復制構造函數被聲明為'顯式'”。 但是當我寫道:

HocSinh::HocSinh(const HocSinh &a)
{
    hoTen = a.hoTen;
    diemVan = a.diemVan;
    diemToan = a.diemToan;
}

沒有錯誤。 有人可以幫我解釋一下。 感謝大家,對不起,如果我的英語太糟糕了。

因為std::vector::push_back被定義為

void push_back (const value_type& val);
void push_back (value_type&& val);

對於像hocSinh這樣的左值, std::vector::push_back模板將使用第一個模板。 std::vector::push_back實現中,復制構造函數用於構造std::vector分配的內存段中的對象。 實現必須使用const value_type& val作為此副本的源,因此它需要具有const簽名的復制構造const來獲取val

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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