【问题标题】:Why vector cannot insert class with this copy constructor? [duplicate]为什么向量不能用这个复制构造函数插入类? [复制]
【发布时间】:2017-07-10 03:11:37
【问题描述】:
#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;
}

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

错误信息是:

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

【问题讨论】:

标签: c++ vector copy-constructor


【解决方案1】:

std::vector::push_back 将const T&amp; 作为其参数(用于左值),这意味着当它被调用时,参数将绑定到类型为const dog&amp; 的参数,该参数将用于在@987654325 中构造dog @ 稍后(在push_back)。

要实现这样的拷贝构造,需要合适的拷贝构造函数(即dog::dog(const dog&amp;);但是拷贝构造函数的签名是dog::dog(dog&amp;),它不能带const dog&amp;,因此编译失败找到合适的复制构造函数来执行操作。

【讨论】:

  • @BenjaminLindley 是的,还不够清楚;无论如何,我试图让它更清楚。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-01
  • 2012-11-28
  • 1970-01-01
  • 1970-01-01
  • 2012-04-29
  • 2018-06-05
  • 2012-02-28
相关资源
最近更新 更多