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

为何长度相同的C风格字符串传入模板函数可通过编译?

问题原因解析

首先要明确字符串字面量的实际类型:像 "abc" 这样的字符串字面量,它的类型是 const char[4]——这里的长度4包含了字符串末尾的终止符 '\0'。

回到你的模板函数:

template <typename T>
int compare(T& x, T& y) {
  return 1;
}

当你调用 compare("abc", "abc") 时,两个实参的类型完全一致(都是 const char[4]),模板参数推导会直接将 T 推导为 const char[4],此时函数的参数类型就是 const char (&)[4](对数组的引用)。

因为两个实参的类型和推导后的参数类型完全匹配,不需要进行任何你提到的两种转换,所以模板推导成功,程序可以正常编译。

如果传入长度不同的字符串字面量,比如 compare("abc", "abcd"),两者的类型分别是 const char[4] 和 const char[5],此时模板无法推导出一个统一的 T 来匹配两个参数,才会触发编译错误。

内容的提问来源于stack exchange,提问作者Amir Mokhammed-Ali

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 20:45:01