ホームページ > バックエンド開発 > C++ > C で動的サイズの Float 配列を宣言すると「予期される定数式」エラーが発生するのはなぜですか?

C で動的サイズの Float 配列を宣言すると「予期される定数式」エラーが発生するのはなぜですか?

DDD
リリース: 2024-10-26 13:46:03
オリジナル
900 人が閲覧しました

Why Does Declaring a Float Array with a Dynamic Size Result in an

配列サイズの混乱によりエラーが発生する

次のような動的サイズの float 配列を宣言する場合:

<code class="cpp">int size = 100;
float x[size][2];</code>
ログイン後にコピー

「予期された定数式」エラーが発生する可能性があります。これは、C では配列のサイズが実行時に決定されず、コンパイル時に固定サイズである必要があるために発生します。ここのサイズ変数は有効な配列次元として使用できません。

ベクトルによる解決策

この問題を回避するには、ベクトルの使用を検討してください:

<code class="cpp">std::vector<std::array<float, 2>> x(size);</code>
ログイン後にコピー

これにより、配列のベクトルが作成され、各配列には 2 つの浮動小数点数が含まれます。

代替ソリューション

あるいは、new で生のメモリ割り当てを使用するか、独自のメモリ割り当てを作成することもできます。配列型:

<code class="cpp">// With new
float (*px)[2] = new float[size][2];

// With custom array type
template<typename T, size_t N>
struct array {
  T data[N];
};

array<float, 2> myArray[size];</code>
ログイン後にコピー

追加オプション

その他のオプションには、ペアのベクトルの使用や、構文ヘルパーを使用した独自の配列型のローリングが含まれます:

<code class="cpp">// Vector of pairs
std::vector<std::pair<float, float>> x(size);

// Custom array type
template<typename T>
struct identity {
  typedef T type;
};

using FloatArray2 = identity<float[2]>::type;
FloatArray2 myArray[size];</code>
ログイン後にコピー

以上がC で動的サイズの Float 配列を宣言すると「予期される定数式」エラーが発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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