我目前正在学习C++,并且一直在阅读C++入门(第5版)。C++用一个变量而不是一个常量表达式初始化一个数组
在第3.5章讨论数组并初始化它们时,它说数组必须使用常量表达式进行初始化。
下面是从书中
unsigned cnt = 42; // not a constant expression
constexpr unsigned sz = 42; // constant expression
int arr[10]; // array of ten ints
int *parr[sz]; // array of 42 pointers to int
string bad[cnt]; // error: cnt is not a constant expression
string strs[get_size()]; // ok if get_size is constexpr, error otherwise”
Excerpt From: Stanley B. Lippman. “C++ Primer, Fifth Edition.”
然而一个例子,当我尝试使用这个一切g++ -std=c++11
编译就好了。所以我有点困惑,因为这本书只是一个错误,或者自从书写本书以来已经修改了标准,尽管本书声明它使用C++ 11.
这是我使用的实际代码其中编译和运行完全正常
unsigned int cnt = 42; // not constant expression
constexpr unsigned int sz = 42; // constant expression
int arr[10]; // array of 10 ints
int *parr[sz]; // array of 10 int pointers
string bad[cnt];
我甚至尝试这样的事情
int var = 2;
int size = var;
int int_arr[size];
,这也适用。
如果任何人有解释或为什么这项工程即使它声明它不应该我会感激它。
谢谢!
请参阅[是否“int size = 10;”产生一个常量表达式?](https://stackoverflow.com/q/21273829/1708801) –