在C++中,是否可以为模板函数的变量定义默认值?
类似下面的方式:
类似下面的方式:
template<class T> T sum(T a, T b, T c=????)
{
return a + b + c;
}
template<class T> T sum(T a, T b, T c=????)
{
return a + b + c;
}
试试这个:
template<class T> T sum(T a, T b, T c=T())
{
return a + b + c;
}
如果您期望一个整型并且希望默认值为5,您也可以输入T(5)。
一切都取决于您对类型所做的假设。
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; }
T
是默认可构造的。对于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;
}
很遗憾,constructThird不能将a和b作为参数。
T
的构造函数。根据您显示的代码,我假设您可能希望该参数为0
。如果要将多个参数传递给构造函数,则可以将T(arg1,arg2,arg3)
作为默认值。是的!
但是你至少应该对 T 是什么有一个概念,否则它就没有用了。
你不能为函数的模板参数设置默认值,也就是说,这是被禁止的:
template<typename T=int> void f(T a, T b);