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