You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中无需定义变量直接传递C数组给指针参数函数的方法

C++中直接向double const*参数传递临时数组的简洁实现方式

当前C++标准下的可行方案

  • 使用std::array临时对象的data()方法:
    这是目前最简洁可读的实现方式,无需预先定义变量,直接构造临时std::array并获取其底层指针即可:

    f(std::array<double, 2>{1.0, 2.0}.data());
    

    临时std::array的生命周期覆盖整个函数调用过程,因此指针在f内部安全有效,不会出现悬空问题。

  • 使用std::initializer_list的data()方法:
    也可以直接构造临时初始化列表传递指针,写法更短,但可读性略弱(无法直观看到数组大小):

    f(std::initializer_list<double>{1.0, 2.0}.data());
    

    临时初始化列表的底层数组生命周期同样覆盖函数调用过程,满足安全要求。

未来C++标准的可能性

截至C23,C仍未支持C99风格的复合字面量(即(double[]){1,2}写法),但已有相关提案(如P2994R0)尝试将类似特性引入标准。若提案被采纳,未来版本的C++可能直接支持这种更简洁的写法,但目前尚未落地。

对比原有方案

相比你提到的结构体包装方式,std::array的写法无需额外定义结构体,代码更简洁、可读性更强,且完全符合标准规范。

内容的提问来源于stack exchange,提问作者ridilculous

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 01:43:19