【问题标题】:Define an array with lengh equal to vector::size() [duplicate]定义一个长度等于 vector::size() 的数组
【发布时间】:2019-01-19 06:07:48
【问题描述】:

我很惊讶下面的代码编译并显示正确的结果。

#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);

    char arr[v.size()];  /* why does this line compile? */

    std::cout << sizeof(arr) / sizeof(arr[0]) << std::endl;  /* display 3 */

    return 0;
}

我认为在 C/C++ 中定义数组时必须使用恒定长度。 vector::size() 是在运行时确定的,为什么会这样呢?

【问题讨论】:

    标签: c++


    【解决方案1】:

    首先,C/C++ 是两种不同的语言。

    C99 定义了 VLA(可变长度数组),但在后续标准中已改为可选。

    C++ 没有定义 VLA。

    因此,这可以编译,因为您使用的编译器可能具有 GCC 的扩展名。那么严格来说,您的代码不符合 C++ 标准。

    【讨论】:

    • 它在 C11 中成为可选而不是被删除。
    • @VTT 非常感谢,已更改
    • @vtt 是的,是时候让标准 imo 强制执行此功能了
    • @Jean-BaptisteYunès 谢谢!我不知道即使我在那里使用了普通的 int 变量,它仍然可以在 C++ 中编译。添加-Wvla后,显示警告。
    猜你喜欢
    • 1970-01-01
    • 2015-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 2017-03-16
    • 2012-10-29
    • 1970-01-01
    • 2021-09-23
    相关资源
    最近更新 更多