0
template <int I>
struct A {};

int main()
{
    int length  = 1;
    int ar[length];
    A<sizeof(ar)> a;
    return 0;
}

エラーが表示されます:(unsigned int)((((unsigned int)(((int)length) + -0x000000001)) + 1u) * 4u)型 'int' の有効なテンプレート引数ではありません。これは定数式ではないためです

この表現の意味は何ですか?なぜそれができないのlength * 4uですか?

4

1 に答える 1

6
int length  = 1;
int ar[length];

これは無効な C++ です。GCC はそれを受け入れますが ( を使用しない場合は、 を使用する必要-pedantic-errorsがあります)、結果の式は有効な C++ オブジェクトではなく、 では使用できません。sizeof

于 2013-09-25T14:08:01.007 に答える