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

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://www.kler.cn/a/576868.html

相关文章:

  • 常见的 Git 命令
  • Python 远程抓取服务器日志最后 1000行
  • c# 2025/3/8 周六
  • 网络运维学习笔记(DeepSeek优化版) 013网工初级(HCIA-Datacom与CCNA-EI)ACL访问控制列表
  • JAVA Spring Boot @Bean 注解的使用和注意事项
  • 【每日学点HarmonyOS Next知识】Tab切换声明周期、复杂Json组装、scroll最大高度、引用传递报错、Web性能
  • saltstack通过master下发脚本批量修改minion_id,修改为IP
  • 递归专题刷题
  • 大模型工程师学习日记(十五):Hugging Face 模型微调训练(基于 BERT 的中文评价情感分析)
  • Python写一个查星座的小程序,适合初学者练手——字典和if语句练习
  • ARMV8的64位指令
  • cdn取消接口缓存
  • Redis 各数据类型使用场景详解
  • Scaling Laws for Neural Language Models
  • DIY Tomcat:手写一个简易Servlet容器
  • HTTPS安全通信协议原理
  • 什么是 Java 的 Timer?
  • opentitan riscv
  • 关于父组件向子组件传值的形式(类型一)
  • 【商城实战(13)】购物车价格与数量的奥秘