我目前正在學習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) –