3

次のコードを念頭に置いてください。

int main()
{
    int n = 3;
    int arr[n] = { 1, 2, 3 };
}

GCC は C99 モードで適切にエラーを出し、error: variable-sized object may not be initializedclang は C++ モードで同じエラーを出します。ただし、C++ モードでは、GCC は文句を言いません。これは、 C extensions VLA pageに記載されていない拡張である可能性があると私に信じさせます。一致するバグレポートも見つかりませんでした。これが拡張機能であるかどうか、または既存のバグレポートがあるかどうかを確認できますか?

4

1 に答える 1

3

この新しい動作は、 GCC 4.9 リリース ノートと関連していると思われるため、実際に言及されています。

G++ は C++1y 可変長配列をサポートします。G++ は長い間 GNU/C99 スタイルの VLA をサポートしてきましたが、現在はイニシャライザと参照によるラムダ キャプチャをさらにサポートしています。C++1y モードでは、G++ は、VLA 型へのポインターの形成や VLA 変数への sizeof の適用など、ドラフト標準で許可されていない VLA の使用について文句を言います。VLA は C++14 の一部ではなく、別のドキュメントの一部になり、おそらく C++17 の一部になるように見えることに注意してください。

C++ のデフォルトの標準モードはgnu++98/gnu++03、このリリースでも引き続き使用されることに注意してください。

于 2014-10-27T23:44:04.790 に答える