为什么vector无法使用此复制构造函数插入类?

时间:2017-07-10 03:11:38

标签: c++ vector copy-constructor

#include <iostream>
#include <vector>
using namespace std;

class dog {
public:
    dog() {}
    dog(dog & d) {
    }
};

int main() {
    vector<dog> vec;
    dog d;
    vec.push_back(d);
    return 0;
}

我无法将狗插入向量中。问题出在复制构造函数中。如果我在复制构造函数中添加const,代码就会编译。我只是想知道为什么我必须在复制构造函数中添加const。

错误消息是:

  

错误:将'const dog'绑定到类型'dog&amp;'的引用'会丢弃限定符

1 个答案:

答案 0 :(得分:1)

std::vector::push_backconst T&作为参数(对于左值),这意味着当它被调用时,参数将被绑定到类型为const dog&的参数,这将是用于在dog之后(vector)内构建push_back

要实现这样的复制构造,需要适当的复制构造函数(即dog::dog(const dog&);但复制构造函数的签名是dog::dog(dog&),它不能{{1}因此,编译器无法找到适当的复制构造函数来执行操作。