提问者:小点点

在C++中将“const”数组的一个元素设置为另一个数组的长度


我定义了一个const int数组,如下所示:

const int arr[] = { 100 , 200, 300, 400 };

现在我想将上面数组的一个元素设置为另一个数组的长度,如下所示:

char buffer[arr[3]];

但它给了我一个编译时错误:

non-constant arguments or reference to a non-constant symbol

我研究这个问题来解决我的问题,但是我对这些问题感到困惑:

  • 为什么不能将常量数组的元素设置为另一个数组的长度?
  • 常量数组的元素是常量还是只读?
  • 常量与C语言中的只读语句有什么区别?

问候!


共1个答案

匿名用户

在C++中确实存在两种不同的常量“事物”。

您知道的const关键字:您不能在运行时修改它。

和一个在编译时被编译器称为常量的值。

那就是:

constexpr int arr[] = { 100 , 200, 300, 400 };

C++要求数组大小为constexpr表达式,而不仅仅是const表达式。有些编译器只允许您使用const大小(实际上甚至不是这个大小),但这不是当前的C++标准。

您可能想知道为什么在这种情况下,在编译时它不是一个常量值。毕竟:它就在那里。是三位数。一个整数。它哪儿也去不了。

好吧,那将是一个不同的,迂腐的问题,但基本上是无关紧要的。编译器完全有权拒绝非constexpr表达式,因为它的格式不正确。的确如此。您别无选择,只能服从编译器的要求。

相关问题


MySQL Query : SELECT * FROM v9_ask_question WHERE 1=1 AND question regexp '(c++|中将|const|数组|元素|设置|数组|长度)' ORDER BY qid DESC LIMIT 20
MySQL Error : Got error 'repetition-operator operand invalid' from regexp
MySQL Errno : 1139
Message : Got error 'repetition-operator operand invalid' from regexp
Need Help?