网站首页 > 博客文章 正文
new表达式也支持数组大小推导
在 C++17 标准中,在定义并初始化静态数组时,是可以忽略数组大小,然后通过初始化数据来推导数组的大小。但使用new来定义并初始化动态数组时,并不支持这种自动推导数组大小的方式,其实这两者原理上是很类似的,增加支持能够使初始化语法更统一,因此 C++20 中加入了类似的语法:
char s1[] = "Hello"; // <1> 很早就支持,自动推导数组大小
char s2[] { "Hello" }; // <2> C++11 开始支持,大括号的列表初始化,自动推导数组大小
char * s3 = new char[] { "Hello" }; // <3> C++20 新增,new也可以自动推导数组大小
double d1[] ( 1, 2, 3 ); // <6> C++20 新增圆括号的列表初始化
double * d2 = new double[] ( 1, 2, 3 ); // <7> C++20 新增,new使用圆括号初始化,也支持自动推导数组大小
自动推导数组大小,带来另一个问题,就是0长度的数组进行初始化的问题,C++20中也一起进行完善:
struct SA
{
int len;
char str[0]; // <1> 结构体中的零长度数组,非标准扩展
// 但大部分编译器都支持,方便访问不定长的buffer数据
};
int a1[0]; // <2> Error,非结构体联合体内的零长度数组,不合法代码,但gcc支持,MSVC不支持
int a2[0] {}; // <3> Error,同上
int a3[] {}; // <4> Error,同上
int* a4 = new int[0] {}; // <5> OK,new生成0长度数组
int* a5 = new int[] {}; // <6> C++20新增,new支持初始化推导数组大小,0长度数组也支持
这个改动看上去并不复杂,普通数组能支持,new表达式应该也是类似的。但奇怪的是,这个功能在 GCC 10.x 和 VS 2019 的最新16.7 版本上都不支持,很多 C++20 的功能在 GCC 8.x 就已经支持,但这个功能还是要等到 GCC 11.x 才能支持,或者VS 2019 的预览版(preview版,16.8)。
【往期回顾】
猜你喜欢
- 2025-08-03 C++语法进阶-字符:字符变量(char)
- 2025-08-03 c++26新功能—Read-Copy-Update
- 2025-08-03 为什么Linux之父那么讨厌C++ 他骂的这几点。句句扎心
- 2025-08-03 为什么Linux之父那么讨厌C++ 他骂的这几点!句句扎心
- 2025-08-03 20道qiao牛逼的c++/c面试题
- 2025-08-03 C++学习教程_C++语言随到随学_不耽误上班_0基础
- 2025-08-03 20天轻松入门《C++第四章——函数》——4经坛教育
- 2025-08-03 看完侯捷老师所有C++视频之后的总结
- 2025-08-03 C++11+ 泛型编程(模板)
- 2025-08-03 C++20并发库新成员jthread(续)
你 发表评论:
欢迎- 08-03 Docker 命令入门实战:搞懂这些才算真正入门!
- 08-03Docker 常用命令分类汇总
- 08-03docker常用命令大全,看这一篇就够了
- 08-03Docker命令大全详解(39个常用命令)
- 08-03Docker 常用命令手册
- 08-03Docker命令最全详解(39个最常用命令)
- 08-03Docker命令最全详解(29个最常用命令)
- 08-03C++语法进阶-字符:字符变量(char)
- 最近发表
- 标签列表
-
- ifneq (61)
- 字符串长度在线 (61)
- googlecloud (64)
- flutterrun (59)
- powershellfor (73)
- messagesource (71)
- plsql64位 (73)
- vueproxytable (64)
- npminstallsave (63)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- nacos启动失败 (64)
- ssh-add (70)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- qcombobox样式表 (68)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)