是否在C ++中通过声明对数组进行了“隐式”分配?

博士

在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]; 

那是; 在读取所需数组的大小后,我声明了数组identity_subdomains和sd。然后,我在后续代码中使用这些数组;例如,从“ input_info”中读取信息以填充数组。该程序已编译并运行。这是C ++的新功能吗?我喜欢。(我使用过“ new”和“ vector”。)我正在使用的c ++编译器是g ++ 7.3.0。

埃雷里卡

我不知道它到底叫什么

可变长度数组。

这是C ++的新功能吗?

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

以及为什么有效

大概是因为它是编译器提供的语言扩展。它是C99(以及可选的C11)中的一项功能,因此某些也符合C99的C ++编译器(对于C ++编译器也是C编译器,这是很常见的)很可能具有此功能。这就是GCC对您的程序的评价:

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

当C说:

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查是否对numpy数组进行了排序

如何知道jtextarea中是否进行了任何更改?

如何修改并检查是否在Java 8中进行了修改?

是否在“ k + = c + = k + = c;”中对内联运算符进行了解释?

是否针对C标准进行了有条件的移动优化?

内核是否进行了碎片整理

微观优化,是否已通过现代浏览器进行了优化?

在Elasticsearch中是否对数字:整数,长整数,浮点数等进行了分析?

Python:是否在列表理解中对split函数进行了多次评估?

检查用户登录的页面是否在Angular 2中进行了更改

是否对克隆语句进行了优化?

检查用户是否仍在angularfire2中进行了身份验证

Kotlin的Float,Int等是否已针对JVM中的内置类型进行了优化?

检查元素是否在Angular2中对attr / class进行了动态标记

Node.js:异步函数中是否对尾部调用进行了优化?

IPython中的__class__实现是否相对于Python进行了修改?

SQL Server-@@ ROWCOUNT的替代方法,用于检查表中是否进行了UPDATE

检查客户是否对Woocommerce中的产品进行了评论

测试VBAProject是否通过来自personal.xlsb的宏进行了保护

声明非空字符串时,C#是否会隐式分配空字符串?

-C中的隐式函数声明

FireDac SQLite是否在Delphi 10.4中进行了更改?

是否针对默认的相等运算符进行了C ++ 20功能测试?

Visual Studio 2013是否对c ++ 11的high_performance_clock进行了改进?

VBA是否通过未知代理对“ HTTP GET”请求进行了处理?

boxplot是否在隐式绘图之前对数据进行分组?

检查onbeforeunload中的ace编辑器以查看是否进行了更改

数组是否在 jOOQ 和 PostgreSQL 中进行了优化?

SoX 中的 noiseprof 是否对声音进行了平均测量?