当我编写复制构造函数时:(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/