sto solo salto in C++, proveniente da CC++ dichiarazione dimensione dell'array e const
In C (89/90), un const
non è in realtà una costante (in contrapposizione ad un #define
'd, enum
, o letterale), ma piuttosto di sola lettura una volta impostato. Vale a dire, posso:
const int x = rand();
e va bene - il punto è x
non è noto fino al runtime. Quindi, non posso
int arr[x]; // error - x is not a compile-time constant
Poi, uno degli standard C (99?) È andato avanti e permessi per gli array a lunghezza variabile. Anche se normalmente codifico lo standard ANSI in C, questo ha effettivamente avuto un impatto ora che sto provando a riprendere C++ 11.
Per quanto ne so, il C++ non consente matrici di lunghezza variabile. Tuttavia, molti compilatori lo consentono come estensione (GCC?). Il problema è che ora sto cercando di imparare C++ 11, non posso dire se ciò che sto codificando è C++ valido, o C++ esteso con compatibilità C99. Es:
std::default_random_engine e{};
std::uniform_int_distribution<int> d{};
const int x{d(e)};
int arr[x]; // compiles
Non posso dire se questo è C++ valido o no. Chiaramente, il valore di x
non è noto fino al runtime. Penso di non poter capire la differenza tra C e C++ const
?
Non valido. Usa flags '-std = ...' dove '...' è uno standard, ad es. 'C++ 11' o' C++ 98'. – juanchopanza
Si può anche usare '-pedantic' – Jarod42
@juanchopanza In realtà ho compilato usando' -std = C++ 11' e clang non ha prodotto avvisi. Usando la bandiera '-pedantic' come suggeriva Shafik ha fatto apparire gli avvertimenti! – zac