ホームページ > バックエンド開発 > C++ > C である配列を別の配列に直接代入できないのはなぜですか?

C である配列を別の配列に直接代入できないのはなぜですか?

Susan Sarandon
リリース: 2024-12-03 02:57:09
オリジナル
975 人が閲覧しました

Why Can't I Directly Assign One Array to Another in C  ?

C の配列 : 代入可能性の制限を理解する

C の配列は独特の動作を示します。その 1 つは代入可能性の制限です。次のコードで示されているように、ある配列を別の配列に代入することが禁止されている理由を調べてみましょう。

int numbers[5] = {1, 2, 3};
int values[5] = {0, 0, 0, 0, 0};
values = numbers;  // Error: C2106
ログイン後にコピー

このコードは、「エラー C2106: '=' : left operand should be l-value」というエラーを生成します。変更不可能なオブジェクトに代入しようとしました。

C の配列は変更不可能であると見なされるため、または主に C との下位互換性のため、代入できません。ある配列を別の配列に代入するには、そのすべての要素をコピーする必要がありますが、これは非常に非効率でエラーが発生しやすくなります。

代わりに、C では標準のコンテナの使用を推奨しています。 std::array や std::vector などのテンプレート ライブラリ (STL)。効率的でタイプ セーフな配列のような機能を提供します。たとえば、std::array を使用して目的の機能を実現します。

#include <array>

std::array<int, 5> numbers = {1, 2, 3};
std::array<int, 5> values = {};
values = numbers;  // No error!
ログイン後にコピー

プリミティブ配列 (元のコードのものと同様) の場合、ループを使用して要素を手動でコピーするか、 std::copy function:

#include <algorithm>

int numbers[5] = {1, 2, 3};
int values[5] = {};
std::copy(numbers, numbers + 5, values);
ログイン後にコピー

さらに、提供されたコードは、C 言語を利用して、値の配列を空の値で初期化するショートカットを示しています。初期化子が提供されていない場合、値はゼロに初期化されるという規則。したがって、次の 2 つのコード スニペットは同等です:

int values[5] = {0, 0, 0, 0, 0};
int values[5] = {};
ログイン後にコピー

これらのニュアンスを理解することで、代入エラーを回避し、C で配列を効果的に操作できます。

以上がC である配列を別の配列に直接代入できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート