-1

重複の可能性:
C/C++: 動的割り当てなしの実行時の配列サイズは許可されていますか?

私は、動的配列へのポインターを返す関数を作成し、それをテストするためのスタブを提供するという単純な割り当てがあるクラスにいます。私はこれを行ったので、割り当ての助けを求めていません。クラスのブログで、別の学生は、明らかにユーザー定義変数 であるint Array[size];場所を直感的に実行できるはずだと示唆しています。 標準 C++ では、少なくとも私のテキストによれば、配列にはサイズ宣言子として「定数整数式...ゼロより大きい」が必要であることを知っています。これは、彼らの例が機能しないことを意味します。実際、VS2010 で試してみると、3 つのエラーが発生します。 ただし、彼らは次のように説明しています。size



私のUbuntuインストールのg ++​​コンパイラと、WinXPインストールのBloodshedコンパイラでさえ、それを知っています。「知っている」の特定のレベルでは、「int Array[size];」が期待されます。動作します(以前の両方のクラスと同様)。

しかし、一部の VS コンパイラでは実行できないことは明らかです。共通点は VS であるため (そうです、私は友人に HIS ボックスで確認するように依頼してこれを確認しました)、VS が問題であると推測することしかできません。いくつかの 1 つ。

その部分は、を使用するために を使用するI know that...理由はないはずだと私が言っていることを参照しているため、すでに混乱がありますが、動的配列を割り当てるために を使用する理由はないはずであることに同意しているようです。 ?) 質問は明らかです。サイズがエラーなしではない場合、受け入れるコンパイラはありますか?#include <new>newnew

int Array[size];const int

4

1 に答える 1

4
int Array[size];

ここで、sizeは定数式ではなく、可変長配列です。これらは、1999 年の ISO 標準の C の標準機能です。C++ 標準はそれらを採用していませんが、一部のコンパイラは言語拡張機能としてそれらをサポートしています。

(C++ コンパイラは、準拠モードで呼び出された場合、少なくとも、サイズが一定でない配列型の診断を発行する必要があります。)

ちなみに、これは使用している IDE とは直接関係ありません。IDE が呼び出すコンパイラによって制御されます。

その名前の標準ヘッダーがありますが、言語に組み込まれている演算子に#include <new>は必要ありません。ヘッダーは、いくつかのオーバーロードされたバージョンnewと、いくつかの他の宣言を提供します。<new>operator new

于 2012-09-18T20:41:31.393 に答える