と仮定我々は、以下の機能を持っている:ベクトル<shared_ptr <T>>を定数ベクトル<shared_ptr <const T>>とパラメータに渡すことはできますか?
void doStuff(const std::vector<std::shared_ptr<const Foo>>& fs) { }
は(安全に)このパラメータにstd::vector<std::shared_ptr<Foo>>
を渡す方法はありますか?たとえば:
std::vector<std::shared_ptr<Foo>> foos;
doStuff(foos);
この暗黙の変換は失敗しますが、キャストで安全に実行できますか? (これは理論的には安全であると思われます。関数はベクターやその内部のオブジェクトを変更できないためです)
constアイテムのshared_ptrを作成すると、複雑さが増すことがわかります。しかし、私はあなたがハックなしでこれを行うことができるとは思わない。 –
これは明確に未定義の動作です。それは毎回動くはずですが、それに頼ることはできません。未定義の動作を示すコードを削除することを含め、コンパイラがどのような変換を行う可能性があるかは誰に分かりますか。 –
未定義の動作とは何ですか?私の質問のコードはコンパイルされないので、おそらくあなたはいくつかの仮説 'const_cast'を参照していますか? – jtbandes