我刚开始学习C++,之前有C语言基础。
在C语言(89/90)中,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
区别?
-pedantic
。 - Jarod42