配列の等価性比較の謎: == が配列と等しくないのはなぜですか?
次のコード スニペットを考えてみましょう:
int main() { int iar1[] = {1, 2, 3, 4, 5}; int iar2[] = {1, 2, 3, 4, 5}; if (iar1 == iar2) cout << "Arrays are equal."; else cout << "Arrays are not equal."; }
多くの人をがっかりさせたことに、このコードは「配列は等しくない」と誤って出力します。この比較が予想外に失敗するのはなぜですか?
配列減衰の解明
その理由は、「配列減衰」の概念にあります。 C では、配列は、ここでの比較演算子の場合のように、特定のコンテキストで使用されると、最初の要素へのポインターに自動的に減衰します。その結果、iar1 と iar2 は、配列ごとに異なる最初の要素のアドレスを効率的に比較します。
要素ごとの比較
2 つであるかどうかを正しく判断するには配列には同じ要素が含まれているため、要素ごとの比較が必要です。これを実現するには、各要素を個別に比較するループを実装するか、C 標準ライブラリの std::array コンテナを利用します。
std::array から Rescue
std::array は配列として動作する固定サイズのコンテナですが、2 つの配列を要素ごとに比較する機能などの追加機能を提供します。平等。以下は、std::array:
std::array<int, 5> iar1 {1, 2, 3, 4, 5}; std::array<int, 5> iar2 {1, 2, 3, 4, 5}; if (iar1 == iar2) { // arrays contents are the same } else { // not the same }
を使用して修正されたコード スニペットです。これで、コードは「配列は等しい」と正しく出力されるようになります。
知恵の要約
以上がC で `==` が配列の等しいかどうかの比較に失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。