我只是跳進C++,選自CC++陣列大小的聲明和const
在C(九十〇分之八十九)到來,一個const
實際上不是一個常數(而不是一個#define
倒是,enum
,或文字),而是隻讀一次設置。即,我可以:
const int x = rand();
這很好 - 點是x
不知道,直到運行時。因此,我不能
int arr[x]; // error - x is not a compile-time constant
然後,其中一個C標準(99?)繼續前進,並允許可變長度數組。儘管我通常使用C語言來編寫ANSI標準,但實際上我正在嘗試拾取C++ 11,這實際上已經產生了影響。我知道,C++不允許變長數組。但是,許多編譯器允許它作爲擴展(GCC?)。問題是,現在我正在學習C++ 11,我不知道我編碼是有效的C++,還是C++擴展了C99兼容性。例如:
std::default_random_engine e{};
std::uniform_int_distribution<int> d{};
const int x{d(e)};
int arr[x]; // compiles
我不知道這是否是有效的C++或不。很顯然,x
的值只有在運行時纔會知道。我想我可能不明白C和C++ const
之間的區別?
無效。使用標誌'-std = ...',其中'...'是標準的,例如'C++ 11'或'C++ 98'。 – juanchopanza 2014-09-19 17:24:41
您也可以使用'-pedantic' – Jarod42 2014-09-19 17:27:20
@juanchopanza我實際上使用'-std = C++ 11'進行編譯,並且clang沒有產生任何警告。建議Shafik使用「pedantic」標誌使警告彈出! – zac 2014-09-19 17:28:11