【问题标题】:Using variable to initialize an array in C++ [duplicate]使用变量在 C++ 中初始化数组 [重复]
【发布时间】:2018-03-01 16:47:47
【问题描述】:

正如C++入门所说,我们不能使用变量作为内置数组的维度,所以下面的代码不起作用

int length = 3;
int array[length] = {0, 1, 2};

错误是

error: variable-sized object may not be initialized

但为什么下面的代码有效?

int length = 3;
int array[length];

【问题讨论】:

  • 这是编译器的扩展,不是标准的 C++。
  • 不要用 GCC 编译它。它将停止工作
  • -pedantic-errors 添加到您的编译器标志中。也请输入-Wall -Wextra -Wfatal-errors
  • @StoryTeller 我使用 clang++
  • @StoryTeller Wat?停止工作?

标签: c++ arrays variable-length-array


【解决方案1】:

这是您的编译器的扩展,称为 Variable Length Array (VLA),并且不在 C++ 标准中,这意味着该代码可能在您切换编译器或编译器供应商决定不再支持此功能的任何时候中断。如果你想要一个不依赖于这个扩展而是依赖于标准的可变长度数组,你应该使用std::vector

【讨论】:

  • 谢谢。但是现在在我的环境中它可以工作了,为什么数组中的元素不是 0?
  • @danche 因为array 还没有初始化,所以它不是零初始化的。
  • “或者编译器供应商决定不再支持这个特性”,好吧,对于那些已经建立和记录得很好,并且已经存在的时间超过 C++ 标准化的扩展,我认为这只是 FUD .无法从当前版本中追溯删除功能。我会更担心使用最新的 C++ 标准功能并遇到编译器错误,当它在次要版本中得到修复时,或者使用不同的编译器进行编译时,它会默默地改变代码行为......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-22
  • 1970-01-01
  • 2016-09-14
  • 2014-04-21
  • 1970-01-01
  • 1970-01-01
  • 2014-11-04
相关资源
最近更新 更多