#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;'的引用'会丢弃限定符
答案 0 :(得分:1)
std::vector::push_back将const T&
作为参数(对于左值),这意味着当它被调用时,参数将被绑定到类型为const dog&
的参数,这将是用于在dog
之后(vector
)内构建push_back
。
要实现这样的复制构造,需要适当的复制构造函数(即dog::dog(const dog&)
;但复制构造函数的签名是dog::dog(dog&)
,它不能{{1}因此,编译器无法找到适当的复制构造函数来执行操作。