C++20 DR11:数组 `new` 可以推导出数组大小
【摘要】 背景与动机 C++20 的改进 示例代码 编译器支持 总结在 C++20 中,DR11 提案(P1009R2)引入了一项重要的语言特性改进:数组 new 表达式可以自动推导数组大小。这一改进极大地简化了动态数组的创建过程,使代码更加简洁易读。 背景与动机在 C++17 及之前的版本中,动态分配数组时,必须显式指定数组的大小。例如:int* arr = new int[10]; // 显式指...
在 C++20 中,DR11 提案(P1009R2)引入了一项重要的语言特性改进:数组 new
表达式可以自动推导数组大小。这一改进极大地简化了动态数组的创建过程,使代码更加简洁易读。
背景与动机
在 C++17 及之前的版本中,动态分配数组时,必须显式指定数组的大小。例如:
int* arr = new int[10]; // 显式指定大小
如果使用 auto
或模板类型,编译器无法自动推导数组大小,这限制了代码的灵活性。
C++20 的改进
C++20 的 DR11 提案允许 new
表达式在某些情况下自动推导数组大小。具体来说,当使用 new
分配数组时,如果初始化列表提供了足够的信息,编译器可以自动推导数组的大小。例如:
auto arr = new int[]{1, 2, 3, 4}; // 编译器自动推导数组大小为 4
这种语法类似于 std::array
的初始化方式,但 new
表达式现在可以自动推导数组大小,而无需显式指定。
示例代码
以下是使用 C++20 DR11 特性的示例代码:
#include <iostream>
int main() {
// 自动推导数组大小
auto arr = new int[]{1, 2, 3, 4, 5};
// 输出数组内容
for (size_t i = 0; i < 5; ++i) {
std::cout << arr[i] << " ";
}
std::cout << std::endl;
// 释放内存
delete[] arr;
return 0;
}
在这个例子中,编译器根据初始化列表 {1, 2, 3, 4, 5}
自动推导出数组大小为 5。
编译器支持
截至 2025 年,主流编译器已经广泛支持 DR11 提案:
- GCC:从 11 版本开始支持。
- Clang:从 9 版本开始支持。
- MSVC:从 19.27 版本开始支持。
总结
C++20 的 DR11 提案通过允许 new
表达式自动推导数组大小,进一步简化了动态数组的创建过程。这一特性不仅减少了代码冗余,还提高了代码的可读性和灵活性。如果你正在使用支持 C++20 的编译器,可以开始尝试这一新特性,以提升你的代码质量。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)