我有一个:
std::vector<std::shared_ptr<T>>
Which I would like to copy to a
std::vector<std::shared_ptr<const T>>
现在我注意到,如果我这样做:
class A
{
public:
A(const std::vector<std::shared_ptr<int>>& list) : internalList(list.begin(), list.end()) {}
std::vector<std::shared_ptr<const int>> internalList;
};
代码可以通过编译 (使用clang++且标准为c++14),但是如果我执行以下操作:
class A
{
public:
A(const std::vector<std::shared_ptr<int>>& list) : internalList(list) {}
std::vector<std::shared_ptr<const int>> internalList;
};
我发现使用拷贝构造函数时会出现奇怪的问题,因为它无法确定从非 const 转换到 const 的转换方式。
xxxx.cpp:672:56: error: no matching constructor for initialization of 'std::vector<std::shared_ptr<const int> >'
请有人解释一下为什么,以及我使用构造函数中的迭代器的方法是否是最佳解决方案?
int
到const int
),那就没问题了。但这里发生的不是这种情况,而是从一个完全不同类型的对象转换为另一个对象。而且复制构造函数只接受自己类型的参数,而不是不同类型的参数。 - Some programmer dudeint a = 1; const int b = a
?所以我的问题是为什么这个赋值可以工作,而使用复制构造函数却不能呢?我真的很好奇它为什么不能这样做?我猜想这不是出于优化的原因... - user18490const std::vector<T>
不同于std::vector<const T>
。因此,与int
和const int
的类比不成立。 - R Sahu