私は型崩壊の性質を理解しようとしています。たとえば、配列が特定のコンテキストでポインタに減衰することは誰もが知っています。int[]
私の試みは、2次元配列がどのように等しいかを理解することですint*
が、2次元配列が期待されるポインター型にどのように対応していないかを理解することです。テストケースは次のとおりです。
std::is_same<int*, std::decay<int[]>::type>::value; // true
これは期待どおりにtrueを返しますが、そうではありません。
std::is_same<int**, std::decay<int[][1]>::type>::value; // false
なぜこれは真実ではないのですか?私はついにそれをtrueに戻す方法を見つけました。それは、最初の次元をポインターにすることでした。
std::is_same<int**, std::decay<int*[]>::type>::value; // true
そして、アサーションは、ポインターを持つすべてのタイプに当てはまりますが、最後は配列です。たとえば(int***[] == int****; // true
)。
なぜこれが起こっているのか説明してもらえますか?予想どおり、配列型がポインタ型に対応しないのはなぜですか?