C++;模板函数默认值 是否可以定义C++中的模板函数的变量的默认值?

C++;模板函数默认值 是否可以定义C++中的模板函数的变量的默认值?,c++,templates,default-value,C++,Templates,Default Value,如下所示: template<class T> T sum(T a, T b, T c=????) { return a + b + c; } 模板T和(ta,tb,tc=??) { 返回a+b+c; } 是 然而,你至少应该知道T可能是什么,或者它是无用的 不能为函数设置模板参数的默认值,即禁止: template<typename T=int> void f(T a, T b); 模板空f(ta,tb); 试试这个: template<class

如下所示:

template<class T> T sum(T a, T b, T c=????)
{
     return a + b + c;
}
模板T和(ta,tb,tc=??)
{
返回a+b+c;
}

然而,你至少应该知道T可能是什么,或者它是无用的

不能为函数设置模板参数的默认值,即禁止:

template<typename T=int> void f(T a, T b);
模板空f(ta,tb);
试试这个:

template<class T> T sum(T a, T b, T c=T())
{
     return a + b + c;
}
template T sum(ta,tb,tc=T())
{
返回a+b+c;
}

如果您希望整数类型,并且希望默认值为5,那么也可以输入T(5)。

是的,只需要从您输入的任何值中为
T
创建一个构造函数。给定您显示的代码,我假设您可能希望该参数为
0
。如果您希望构造函数有多个参数,可以将
T(arg1、arg2、arg3)
作为默认值。

这一切都取决于您可以对类型所做的假设

template <typename T> T sum( T a, T b, T c = T() ) { return a+b+c; }
template <typename T> T sum2( T a, T b, T c = T(5) ) { return a+b+c; }
template T sum(ta,tb,tc=T()){返回a+b+c;}
模板tsum2(ta,tb,tc=T(5)){返回a+b+c;}
第一种情况,它只假设
T
是默认可构造的。对于值初始化(IIRC)的POD类型,基本上是
0
,因此
sum(5,7)
将调用
sum(5,7,0)


在第二种情况下,您需要可以从整数构造类型。对于整数类型,
sum(5,7)
将调用
sum(5,7,int(5))
,这相当于
sum(5,7,5)

是您可以定义默认值

template <class T> 
T constructThird()
{
    return T(1);
}

template <class T> 
T test(T a, 
       T b, 
       T c = constructThird<T>())
{
    return a + b + c;
}
模板
T第三()
{
返回T(1);
}
模板
T检验(T a,
T b,,
tc=constructionthird())
{
返回a+b+c;
}

不幸的是,我们不能将a和b作为参数

默认参数仅在使用时才实例化。这意味着你可以把任何与
t
完全不兼容的疯狂的东西放进去,只要你传递一个明确的参数就可以了。