我定义了一个const int
数组,如下所示:
const int arr[] = { 100 , 200, 300, 400 };
现在我想将上面数组的一个元素设置为另一个数组的长度,如下所示:
char buffer[arr[3]];
但它给了我一个编译时错误
:
non-constant arguments or reference to a non-constant symbol
我研究这个问题来解决我的问题,但是我对这些问题感到困惑:
常量
数组的元素设置为另一个数组的长度?常量
数组的元素是常量还是只读?常量
与C语言中的只读语句有什么区别?问候!
在C++中确实存在两种不同的常量“事物”。
您知道的const
关键字:您不能在运行时修改它。
和一个在编译时被编译器称为常量的值。
那就是:
constexpr int arr[] = { 100 , 200, 300, 400 };
C++要求数组大小为constexpr
表达式,而不仅仅是const
表达式。有些编译器只允许您使用const
大小(实际上甚至不是这个大小),但这不是当前的C++标准。
您可能想知道为什么在这种情况下,在编译时它不是一个常量值。毕竟:它就在那里。是三位数。一个整数。它哪儿也去不了。
好吧,那将是一个不同的,迂腐的问题,但基本上是无关紧要的。编译器完全有权拒绝非constexpr
表达式,因为它的格式不正确。的确如此。您别无选择,只能服从编译器的要求。