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

如何在标准C++17中向固定签名函数传递临时数组?

直接调用foo的简洁方案:复合字面量

当然可以!你完全不需要临时变量或者模板包装函数,借助C99引入的复合字面量特性,就能实现像你期望的那种简洁调用方式,而且完全适配foo的固定签名。

具体调用写法

直接在函数参数位置构造符合要求的数组即可:

foo(3, (char const * const []){"one", "two", "three"});

原理说明

  • (char const * const [])是复合字面量的类型声明,和foo第二个参数char const * const argv[]的类型完全匹配;
  • 后面的{"one", "two", "three"}是数组的初始化列表,编译器会在调用点临时创建这个数组,然后自动退化为对应的指针传递给foo;
  • 这种写法在主流C编译器(GCC、Clang、MSVC)中也完全支持(属于C对C特性的兼容扩展,C++11及以后均可正常使用),刚好满足你编译期已知测试用例的场景。

为什么这能替代临时变量/模板?

相比你之前的两种写法:

  • 省去了单独定义临时数组的步骤,代码更紧凑;
  • 不需要额外写模板包装函数来推导数组大小,直接显式指定元素个数(你测试时编译期已知这个数值)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 09:42:32