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 回答