gpt4 book ai didi

c++ - 复制构造函数中的 const 而不是 const?

转载 作者:太空狗 更新时间:2023-10-29 20:59:01 24 4
gpt4 key购买 nike

当我编写复制构造函数时:(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 签名的复制构造函数来获取 val

关于c++ - 复制构造函数中的 const 而不是 const?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25830728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com