gpt4 book ai didi

c++ - c++中是否有声明的 "implicit"数组分配?

转载 作者:行者123 更新时间:2023-11-30 02:17:12 27 4
gpt4 key购买 nike

在 C++ 中,当数组的大小直到运行时才知道时,我想为数组分配内存。

我经常使用常量(编译时)分配;但希望在“始终”使用运行时分配方面取得进展。我实际上通过声明摆脱了“隐式”分配。 (我对发生的事情的术语。)我想知道它到底叫什么,为什么它有效。我认为讲述这个故事的片段:

std::ifstream infile;
infile.open("input_info");
if (infile.is_open()) {
infile >> number;
std::cout << number << " " << std::endl;
}

std::pair<int, int> incident_subdomains[number];
int sd[number][2];

也就是说;读取所需数组的大小后,我声明数组 incident_subdomains 和 sd。然后我在后续代码中使用这些数组;例如,从“input_info”中读取信息来填充数组。程序编译运行。这是C++的新特性吗?我喜欢。 (我使用了“new”和“vector”。)我使用的 c++ 编译器是 g++ 7.3.0。

最佳答案

And I wonder what it is really called

可变长度数组。

Is this a new feature of C++?

没有。这不是标准 C++ 中的功能。在 C++ 中,非动态分配数组的大小必须是编译时常量。

and why it works

大概是因为它是你的编译器提供的语言扩展。它是 C99 中的一个特性(在 C11 中是可选的),因此一些也兼容 C99 的 C++ 编译器(C++ 编译器也是 C 编译器是很常见的)可能具有这样的特性。这是 GCC 对您的程序的评价:

warning: ISO C++ forbids variable length array 'incident_subdomains' [-Wvla]

当 Clang 说:

 warning: variable length arrays are a C99 feature [-Wvla-extension]

在标准 C++ 中创建动态大小数组的最简单方法是使用 std::vector

关于c++ - c++中是否有声明的 "implicit"数组分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53992488/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com