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

类作用域外如何调用与模板函数同名的非模板函数?

解决方法:调用同名非模板add函数

首先明确问题根源:你写的非模板add函数参数是非常量左值引用(int&),而调用时传入的1、2是右值,无法绑定到非常量左值引用,因此编译器只能匹配参数为const T&的模板版本(该类型可以绑定右值)。

要调用非模板函数,有两种可行方案:

方案1:传入左值变量

创建可被非常量引用绑定的左值变量,再传递给add:

int main()
{
    int a = 1, b = 2;
    cout << add(a, b) << endl;
    return 0;
}

此时编译器会优先匹配非模板函数(非模板重载比模板实例化的优先级更高),就能得到你期望的输出。

方案2:修改非模板函数的参数类型

如果不想调整调用方式,可以把非模板add的参数改为const int&,让它能接受右值:

/* 修改后的非模板add函数 */
int add(const int& a, const int& b){
    cout << "adding" << endl;
    return a+b;
}

修改后,直接调用add(1,2)会优先匹配非模板版本,因为它是更精确的具体类型重载,优先级高于模板实例化。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 20:18:20