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

标签 c++ constructor 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 签名的复制构造函数来获取 val

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

相关文章:

c++ - Doxygen 混淆了函数文档和内部类文档

C++,复制构造函数在字符数组中不能正常工作

types - 错误: constructor Player in class Player cannot be applied to given types;

c++ - 在此函数中使用引用参数有什么好处吗?

c++ - 迭代器复制构造函数错误,非法作为右侧 '.' 运算符

c++ - 通过 C++ 代码使用 WEKA 的最简单方法是什么?

c++ - 在 C++ 中追加结构数组

c++ - 如何知道二叉堆中的索引是否处于奇数级别?

Java默认构造函数没有初始化

c++ - 为什么 map.insert() 方法调用复制构造函数两次?