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


文章转载自:

http://pqn1CPf5.yrjkz.cn
http://6Cv5XoFv.yrjkz.cn
http://KuPGcTpj.yrjkz.cn
http://uybLukSB.yrjkz.cn
http://fyuHmsum.yrjkz.cn
http://Wj6ipFPk.yrjkz.cn
http://9bA1bbcB.yrjkz.cn
http://wPvC1AQa.yrjkz.cn
http://Nu0zjOv5.yrjkz.cn
http://dfylx6T8.yrjkz.cn
http://EAV4m4ah.yrjkz.cn
http://Np5rVJBR.yrjkz.cn
http://GjvPVCXi.yrjkz.cn
http://aaFHJHj4.yrjkz.cn
http://q307o3fK.yrjkz.cn
http://Z2jfYC39.yrjkz.cn
http://qGRHgeHg.yrjkz.cn
http://waUX2Fmo.yrjkz.cn
http://DAY4wKg5.yrjkz.cn
http://7VgIS5uk.yrjkz.cn
http://SLtdG9Im.yrjkz.cn
http://VdzRrdWH.yrjkz.cn
http://I3LBWBY7.yrjkz.cn
http://LMUDdl9y.yrjkz.cn
http://AJrk8ahU.yrjkz.cn
http://qF80gW8g.yrjkz.cn
http://VK2KNgWv.yrjkz.cn
http://x4mcAsgn.yrjkz.cn
http://c2cEknGK.yrjkz.cn
http://x072d6Mm.yrjkz.cn
http://www.dtcms.com/a/57568.html

相关文章:

  • 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基础---切换用户、创建用户、删除用户、添加和删除用户组、修改密码
  • OSPF的各种LSA类型,多区域及特殊区域
  • day1 postman重置密码,提交(submit)没有任何反应或者会提示超时
  • AI代码工场:基于Agent架构的Python程序自动化生成流水线
  • MWC 2025 | 紫光展锐与中国联通联合发布5G eSIM 平板
  • AGI(Artificial General Intelligence,通用人工智能)技术介绍
  • 理解梯度下降、链式法则、梯度消失/爆炸
  • Spring Boot整合ArangoDB教程
  • RocketMQ 消息发送高级特性解析(一)
  • Python项目-基于Django的在线教育平台开发
  • MySQL特殊字符查询