【问题标题】:Why is it a bad idea to use variable length arrays in C++?为什么在 C++ 中使用可变长度数组是个坏主意?
【发布时间】:2019-07-28 05:48:42
【问题描述】:

为什么在 C++ 中使用可变长度数组是个坏主意?

所以,例如,这段代码:

int i = 0;
std::cin >> i;

int array[i]; // bad?

编辑:这不是重复,因为重复询问标准选择不将它们放入的原因。这个问题询问可变长度数组违反了哪些标准规则。

【问题讨论】:

  • 注意:这是为无数提问者提供的资源问题,他们无意中将上述示例中的内容放入其代码中。因此,我已经尽我所能回答了这个问题。请随时添加比我更好的答案。
  • Re:“这个问题解释了可变长度数组违反了哪些标准规则”:问题不是“解释”事物,而是“询问”事物;这个问题询问 VLA 违反了哪些标准规则。相反,它只是询问我们为什么不应该使用它们,one 答案(你的)通过列出标准的相关部分来回答问题。 (也就是说,我同意这个问题并不完全是对那个问题的欺骗;这个问题比这个问题更具体。)
  • C++,从 C11 开始,可变长度数组是实现定义的特性:C11 Standard - 6.10.8.3 Conditional feature macros "__STDC_NO_VLA__ 整数常量 1,意在表明实现不支持可变长度数组或可变修改的类型。"
  • @DavidC.Rankin VLA 在 C++ 中从不

标签: c++ language-lawyer


【解决方案1】:

一些编译器支持可变长度数组作为扩展。它们不是标准的 C++。使用 VLA 会使您的代码不可移植。

更好的选择是使用std::vector

int i = 0;
std::cin >> i;

std::vector<int> array(i);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-29
    • 1970-01-01
    • 1970-01-01
    • 2011-07-11
    • 2020-08-10
    • 2011-08-14
    • 1970-01-01
    相关资源
    最近更新 更多