std::vector<std::shared_ptr<const T>>
にコピーしたい
std::vector<std::shared_ptr<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;
};
(打ち鳴らす++のstdを== 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> >'
なぜしてください誰かが説明し、私は(コンストラクタでイテレータを使用して)それを行う方法が最善の解決策である場合にもらえますか?
std::vector
が変換コンストラクタを提供した場合にあなたのコードは、仕事ができる
非constからconstへの変換(つまり、intからconst intへの変換)だったら問題ありません。しかし、それはここで起こっていることではなく、あるタイプのオブジェクトから完全に異なるタイプのオブジェクトへの変換です。そして、コピーコンストラクタは引数として独自の型だけを取ります。異なる型ではありません。 –
それは意味がありますが、この作品のようなものではないでしょうか? 'int a = 1; const int b = a'?だから私の質問は、この割り当てが働いている理由とコピーコンストラクタを使用してこれを行うことができないのですか?私は本当にこれをやめることから何が止まっているのか不思議です。私はそれが最適化の理由で行われていないと仮定します... – user18490
@ user18490 'const std :: vector'は 'std :: vector 'と同じではありません。したがって、 'int'と' const int'の類推は成立しません。 –