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
相关产品推荐
相关产品推荐

