有這樣的代碼:陣列通過不恆定變量定義的大小的
#include <iostream>
int main()
{
int size;
std::cin >> size;
size = size + 1;
int tab3[size];
tab3[0] = 5;
std::cout << tab3[0] << " " << sizeof(tab3) << std::endl;
return 0;
}
結果是:
$ g++ prog.cpp -o prog -Wall -W
$ ./prog
5
5 24
爲什麼這個代碼甚至編譯?不應該是一個常量變量的數組長度?
我用g ++版本4.4.5。
+1,我不知道'sizeof()'也可以是非常量。如果我曾經想過使用'sizeof()',我會期望它由於某種原因失敗。 –
@ MichaelKrelin-hacker:再次,作爲一個擴展...... VLA需要一個運行時的'sizeof()',所以它是C99標準的一部分。這只是一個非常C++類型的東西。考慮'decltype'和所有這些... –
雖然沒有出現任何*標準的在堆棧上分配內存的方法,這很有趣。我們可以使用placement-new來處理對象構造,但在C++中不可能在堆棧上獲取可變數量的原始內存。 –