2013-09-25 42 views
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' 的有效模板參數,因爲它是一種非恆定表達表達式((的SizeType)(((ssizetype)長度)+ 1))+ 1

這個表達意義是什麼?爲什麼不能只是length * 4u

+0

你問這個表達的目的,或者你爲什麼會收到錯誤? – cdhowie

+0

@cdhowie我問一下表達的感覺。我知道錯誤的原因; – eXXXXXXXXXXX2

回答

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

這是無效的C++。 GCC接受它(當不使用-pedantic-errors時,您的應爲),但生成的表達式不是有效的C++對象,不能在sizeof中使用。

+0

是的,我知道它。但問題是gcc爲什麼會這樣表達。 – eXXXXXXXXXXX2

+0

@eXXXXXXXXXXX它不是一個常量表達式,因爲'length'不是一個常量表達式,所以'ar'的綁定是非常量的。 – komiga

+0

@plash問題是爲什麼gcc做了表達式'(unsigned int)((((unsigned int)(((int)length)+ -0x000000001))+ 1u)* 4u)'而不是'length * 4u'。 – eXXXXXXXXXXX2

相關問題