【问题标题】:In C++ the size of arrays must be a constant expression [duplicate]在 C++ 中,数组的大小必须是一个常量表达式 [重复]
【发布时间】:2021-07-20 00:43:51
【问题描述】:

我有一个与this one 密切相关的问题,不同之处在于我的代码示例没有使用new

我在这里重复这个问题:

C++ 之旅(第二版)的第 11 页上写着

数组的大小必须是常量表达式。

附近的例子表明他指的是 C 风格的数组,而不是 std::array。

所以如下:

int main(int argc, char **argv) {
  double my_array[argc];
}

不应该编译,但是(GCC 9.3.0,g++ -std=c++17 -Wall)没有警告。

(这个问题在Are variable length arrays there in c++? 中有部分答案我没有找到它,因为我不知道/忘记了术语可变长度数组。下面我用我自己的答案来完成这个这个问题提供了一种强制 GCC 遵守当前 ISO 的方法。)

【问题讨论】:

    标签: c++


    【解决方案1】:

    好的,这是我使用的编译器 GCC 的一个特性:它默认实现 VLA(可变长度数组),即使这不是 C++17 标准的一部分。 事实上,在 Barry 对the related question 的回答(已接受的回答)中提到了这一点,可以在他的脚注中找到。

    使用选项 -pedantic-errors 编译确实会失败,正如预期的那样。

    【讨论】:

    • 这并没有解决问题,但 C++ 标准只要求编译器在一种情况下拒绝编译代码:当它遇到 #error 指令时。在所有其他情况下,符合要求的编译器必须发出诊断,然后它可以继续编译代码,具有特定于实现的含义。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-14
    • 2011-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    相关资源
    最近更新 更多