来自非constexpression的数组初始化

时间:2015-12-06 14:30:44

标签: c++ arrays g++ constexpr

我试图理解从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 ++功能?

2 个答案:

答案 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