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

C++字符串字面量传入模板函数p(T& a)时T的类型推导问题

C++模板参数推导与数组引用语法解答

1. const char(&a)[5]语法解释

C++中数组作为参数传递时默认会退化为指针,若要传递数组的引用并保留长度信息,需要使用带括号的引用语法:

  • 若写作const char &a[5],由于[]运算符优先级高于&,会被解析为「长度为5、元素类型为const char&的数组」,不符合传数组引用的需求。
  • 加括号后const char (&a)[5]表示a是一个左值引用,引用的对象是「长度为5、元素类型为const char的数组」。

注:你提到调用p("abc")可以正常运行,常规场景下"abc"是带末尾\0的字符串字面量,类型为const char[4],无法匹配长度为5的数组引用,大概率是示例代码的笔误,只要参数声明的数组长度和字面量实际长度一致即可正常匹配。

2. 模板版本的参数推导结果

调用p("abc")时,模板参数T的推导结果为 const char[4],推导逻辑如下:

  • 模板参数是左值引用T&,推导过程不会触发数组到指针的退化,也不会丢弃实参的const限定。
  • 实参"abc"的类型是const char[4],匹配T&后,T会被推导为const char[4],此时形参a的类型为const char (&)[4],和非模板版本的语法本质是一致的。

你可以通过输出type_name<T>()验证推导结果,和decltype(a)的输出const char (&)[4]可以对应上。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:45:03