是否可以在C ++中为模板函数的变量定义默认值?
如下所示:
template<class T> T sum(T a, T b, T c=????)
{
return a + b + c;
}
答案 0 :(得分:10)
试试这个:
template<class T> T sum(T a, T b, T c=T())
{
return a + b + c;
}
如果您期望整数类型并且希望默认值为5,您也可以输入T(5)。
答案 1 :(得分:7)
这一切都取决于您可以对类型做出的假设。
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
是默认可构造的。对于价值初始化(IIRC)的POD类型,基本上是0
,因此sum( 5, 7 )
将调用sum( 5, 7, 0 )
。
在第二种情况下,您需要可以从整数构造类型。对于整数类型,sum( 5, 7 )
会调用sum( 5, 7, int(5) )
,相当于sum( 5, 7, 5 )
。
答案 2 :(得分:2)
是的,您可以定义默认值。
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作为参数。
答案 3 :(得分:1)
是的,只需要T
的构造函数,无论你放在那里有什么价值。鉴于您显示的代码,我假设您可能希望该参数为0
。如果您想要构造函数有多个参数,可以将T(arg1, arg2, arg3)
作为默认值。
答案 4 :(得分:0)
是!
但是你应该至少知道T可能是什么,或者它是无用的。
您无法为功能设置模板参数的默认值,即禁止此操作:
template<typename T=int> void f(T a, T b);