C++ では、次のコードをコンパイルします。
std::pair <int, int> x;
static_cast <std::pair <const int, int>*> (&x);
エラーが発生します:
error: invalid static_cast from type ‘std::pair<int, int>*’ to type ‘std::pair<const int, int>*’
テンプレートパラメーターリストの型をcv修飾すると、原則として「互換性のない」結果が得られるため、なぜそれが起こるのかを多かれ少なかれ理解しています。この場合、そうでなくても、コンパイラはそれを知る方法がありません。
とにかく、この変換を実行する非ハックな方法はありますか? reinterpret_cast
以前はタイプパニングの問題を抱えていたので、何にでも使用することに警戒しています。また、これはパフォーマンスが重要なコードであるため、一時的に使用することはできません。
編集:
これが私がやっていることです。と互換性のあるカスタム コンテナ インターフェイスを実装していますstd::unordered_map
。そのため、 であるvalue_type
必要がありますpair <const key_type, mapped_type>
。いくつかの最適化のために、値を、なしで内部的に保存する必要があります。ただし、そうすると、値への参照を返す必要があり、これらの非定数ペアへの参照しかないため、コンテナーにイテレーターを ( なしで) 実装することはできません。pair <key_type, mapped_type>
const
reinterpret_cast