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
完全不兼容的疯狂的东西放进去,只要你传递一个明确的参数就可以了。