我试图理解从C ++ Primer Book中获取的关于数组初始化的示例。 他们说那个
数组中元素的数量是数组类型的一部分。因此,必须在编译时知道维度,这意味着维度必须是常量 表达
以下示例会导致错误:
unsigned cnt = 42; // not a constant expression
string bad[cnt]; // error: cnt is not a constant expression
但是,使用g ++ 4.8.4进行编译不会导致错误。
这是本书中的错误或过时信息,还是只是一个g ++功能?
答案 0 :(得分:1)
是的,它应该是一个g ++功能。
使用-pedantic
选项时会发出警告。
测试程序
#include <string>
using std::string;
int main(void){
unsigned cnt = 42; // not a constant expression
string bad[cnt]; // error: cnt is not a constant expression
return 0;
}
结果Wandbox
prog.cc: In function 'int main()':
prog.cc:6:19: warning: ISO C++ forbids variable length array 'bad' [-Wvla]
string bad[cnt]; // error: cnt is not a constant expression
^
答案 1 :(得分:0)
我认为值得谈谈&#34; alloca&#34;这里。这就是这些类型的数组的实现方式。当然,他们有限制,如操作员的大小不支持他们。您可以查看详细信息:http://man7.org/linux/man-pages/man3/alloca.3.html