C における配列代入のジレンマ
C では、配列を別の配列に直接代入することは不可能であり、エラー メッセージ「エラー C2106」が表示されます。 : '=' : 左オペランドは左辺値でなければなりません」が発生しました。この問題は、C との互換性による C の配列の特有の動作に起因します。
動作を理解する
C の配列は、からの継承により代入できません。 Cの配列実装。配列は最初の要素への減衰参照として表現され、変更不可能な l 値になります。つまり、配列を通常の変数のように他のオブジェクトに割り当てることはできません。
ソリューション
C で配列のような機能を使用するには、標準テンプレートの代替コンテナーstd::array や std::vector などのライブラリ (STL) が推奨されます。これらの STL コンテナでは、割り当て機能を提供しながら配列のような動作が可能です。
std::array を使用した例
#include <array> int main() { std::array<int, 5> numbers = {1, 2, 3}; std::array<int, 5> values = {}; values = numbers; }
配列を使用したフォールバック
STL コンテナの使用がオプションでない場合は、ループを使用して配列要素を手動でコピーするか、 std::copy のような関数が必要です。
配列コピーの例
#include <algorithm> int main() { int numbers[5] = {1, 2, 3}; int values[5] = {}; std::copy(numbers, numbers + 5, values); }
補足
値の配列は、以下に示すように、集合体の標準定義の値の初期化ルールに基づいて、空の初期化子リストを使用して初期化できます。これは、未指定の要素をゼロに初期化します。
int values[5] = {};
以上がC で配列を直接代入できない理由とその代替手段は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。