我看c++ primer 第五版中文版时 看到了书上说数组的长度必须是常量表达式(书上的原话是指的维度,但感觉是翻译的问题,指的确实是长度),然后我试着用变量来写,能通过编译,这里是什么情况,是编译器没有检查,还是语法上本来就合法? 而且我在上面写了一个函数,返回值是int,没有标注constexpr,也可以作为数组的长度,同求解释。!
业精于勤,荒于嬉;行成于思,毁于随。
反對 @同意並接受 (逃可以用這個測試下
int txt_size() { int a, b; scanf("%d%d", &a, &b); return a -b; }
目測是擴充了
在VS2012中除了int ib[4*7-14]可以透過編譯,其他都出錯。那麼問題來了,CB這樣擴展語言特性真的好嗎?
因為你寫的這變數的值都是確定了的, 編譯器在給數組分配記憶體時已經獲得了確切的數值。
C++數組長度是不能改動的,這就是為什麼要開超大數組儲存佇列啊。
int q[10000001]; //C++的超大数组
就好像有一個變數a,陣列h,
int a=2; int h[a]; //此时等价于int h[2]; a=5; //不管怎么变化,
此時h[4]是不存在的,你可以試試看。
可能的原因是你的編譯器同時支援了C99的VLA, which在C++標準的意義下是illegal的。你可以試試把-Wall -pedantic 之類的flag加上再編譯看看,應該就會報錯了
反對 @同意並接受 (逃
可以用這個測試下
目測是擴充了
在VS2012中除了int ib[4*7-14]可以透過編譯,其他都出錯。那麼問題來了,CB這樣擴展語言特性真的好嗎?
因為你寫的這變數的值都是確定了的,
編譯器在給數組分配記憶體時已經獲得了確切的數值。
C++數組長度是不能改動的,這就是為什麼要開超大數組儲存佇列啊。
就好像有一個變數a,陣列h,
此時h[4]是不存在的,你可以試試看。
可能的原因是你的編譯器同時支援了C99的VLA, which在C++標準的意義下是illegal的。你可以試試把-Wall -pedantic 之類的flag加上再編譯看看,應該就會報錯了