【发布时间】:2017-07-28 01:46:31
【问题描述】:
我目前正在学习C++,一直在阅读C++ Primer (5th Edition)。
在讨论数组和初始化它们的第 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];
这也有效。
如果有人有解释或为什么它会起作用,即使它表明它不应该,我会很感激。
谢谢!
【问题讨论】:
标签: c++ arrays c++11 variables constants