当前位置: 首页 > news >正文

C++20 DR11:数组 `new` 可以推导出数组大小

文章目录

    • 背景与动机
    • C++20 的改进
    • 示例代码
    • 编译器支持
    • 总结

在 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 的编译器,可以开始尝试这一新特性,以提升你的代码质量。

相关文章:

  • VS Code连接服务器教程
  • C/C++类型转换
  • 扎实基础:测试工作的基石
  • Flask 框架简介
  • Manus+Ollama实现本地大模型部署和应用测试
  • 基于multisim的花样彩灯循环控制电路设计与仿真
  • 密码学(终极版)
  • Django系列教程(5)——Django模型详解
  • 物联网设备接入系统后如何查看硬件实时数据?
  • 【摸鱼指南】--- VSCode 使用 Thief-Book 隐形阅读模式配置教程 程序员必备插件
  • 子集(78)
  • Docker 深入解析 Docker 配置文件:/etc/docker/daemon.json
  • 操作系统——进程与线程
  • 用CMake编译glfw进行OpenGL配置,在Visual Studio上运行
  • python爬虫系列课程8:js浏览器window对象属性
  • K8s构建带有maven环境的jenkins镜像
  • Fragment 懒加载的优化方案
  • vuejs 模板语法、条件渲染、v-for、事件处理、表单输入绑定
  • 01.04、回文排序
  • Linux基础---切换用户、创建用户、删除用户、添加和删除用户组、修改密码
  • 档案网站建设的步骤/网站开发工具
  • 总算把网站设计好了/seo查询友情链接
  • 网站做多久才有流量/如何给自己的公司建网站
  • 赣州网站制作/免费网站 推广网站
  • 自适应网站建设哪家便宜/站优化
  • 中国武汉建设信息网首页/网站优化课程