我只是跳进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