3

なぜこれがClang4.0で機能するのか疑問に思っていました。

unsigned cnt = 42;
int k[cnt];

しかし、これはしません:

unsigned cnt = 42;
string bad[cnt];

C++プライマー第5版をチェックしました。それはそれを言います:

ディメンションはコンパイル時に認識されている必要があります。つまり、ディメンションは定数式である必要があります。

それが本当なら、なぜint k[cnt];仕事をするのですか?

4

3 に答える 3

14

どちらのスニペットもC++では機能しません。

ただし、Cでは、配列サイズとして非定数式を使用することができます。一部のコンパイラ(たとえば、-pedanticオプションなしのGCC)は、C++コードでそのC機能をサポートします。

要素タイプの違いについては、コンパイラ固有です。GCCは両方をコンパイルします。この場合、 clang ++は非PODタイプ(などstd::string)を禁止します。

于 2013-02-10T04:39:14.217 に答える
0

clang4.0は実際にapplexcodeclangですか?それは実際にはバージョン3.1だと思います。clangはそれ自体が素晴らしい説明を提供します:

warning: variable length arrays are a C99 feature
      [-Wvla-extension]
    int k[cnt];
于 2013-02-10T19:57:06.770 に答える
0

どのコンパイラを使用していますか。私はgccを使用しており、constとnonconstの両方が正常に動作します。

これはcの問題ではなく、配列は変数を介して定義されることを意図しておらず、マクロとconst式のみを意味します。

これはコンパイラの解釈の問題であり、標準に関連しているとは思えません。

于 2013-02-10T04:42:40.847 に答える