当我编写我的复制构造函数时:(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);
我收到错误:“没有可用的复制构造函数或复制构造函数被声明为'explicit'”。 但是当我写道:
HocSinh::HocSinh(const HocSinh &a)
{
hoTen = a.hoTen;
diemVan = a.diemVan;
diemToan = a.diemToan;
}
没有错误。 有人可以帮我解释一下。感谢大家,对不起,如果我的英语太糟糕了。
答案 0 :(得分:4)
因为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
。