84669 Lernen von Personen
152542 Lernen von Personen
20005 Lernen von Personen
5487 Lernen von Personen
7821 Lernen von Personen
359900 Lernen von Personen
3350 Lernen von Personen
180660 Lernen von Personen
48569 Lernen von Personen
18603 Lernen von Personen
40936 Lernen von Personen
1549 Lernen von Personen
1183 Lernen von Personen
32909 Lernen von Personen
我看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加上再编译看看,应该就会报错了