const std::vector<const Array*> &objects
メソッドに引数として渡されるタイプのベクトルがあります。
const_cast したいのですが、なぜかできません。私が試してみました:
vector<const Array*> obj = const_cast<const std::vector<const Array*> >(objects);
他のいくつかの方法がありますが、文句を言い続けます。
何か案は ?
const std::vector<const Array*> &objects
メソッドに引数として渡されるタイプのベクトルがあります。
const_cast したいのですが、なぜかできません。私が試してみました:
vector<const Array*> obj = const_cast<const std::vector<const Array*> >(objects);
他のいくつかの方法がありますが、文句を言い続けます。
何か案は ?
まず、しないでください。関数のシグネチャを変更して非定数参照を取得します。これを行うと、UBのリスクが高まります。
const std::vector<const Array*> myData = /* fill */;
yourFunction(myData); // try to modify my stuff and you get UB!
これで、何らかの理由(レガシーAPIなど)で実行する必要があるとまだ確信している場合は、次のように実行されます。
vector<const Array*>& obj = const_cast<std::vector<const Array*>&>(objects);
ここで、同じオブジェクトを参照しますが、obj
const -qualifiedではありません。この時点で、すべてが明確に定義されています。UBであるconstオブジェクトを変更するだけなので、注意してください。objects
obj
とにかくコンテンツをコピーコンストラクターしているので、ここでキャストする必要はありません。コピーコンストラクターはconst
参照を受け入れます。
言うだけ:
std::vector<const Array*> obj = objects;
それを反復する必要がある関数に渡す必要があります(変更は必要ありません)
を使用しconst_iterator
ます。
const std::vector<const Array*>
aを aにキャストしconst std::vector<const Array*>
ますか? それらは同一ではありませんか。const を削除する場合:
std::vector<const Array*> obj = const_cast<std::vector<const Array*> >(objects);
// |
// no const
しかし、もっと重要な質問は次のとおりです。objects
である場合const
、それを変更することは想定されていません。
やりたいことがはっきりしている場合は、ベクトルへの非 const 参照を取得する方法を次に示します。
const std::vector<const Array*> &objects;
vector<const Array*>& obj = const_cast<std::vector<const Array*>& >(objects);