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
?
答案 0 :(得分:6)
int length = 1;
int ar[length];
这是无效的C ++。 GCC接受它(当不使用 时使用的-pedantic-errors
),但结果表达式不是有效的C ++对象,不能在sizeof
中使用。