是否可以在 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
是默认可构造的。对于值初始化(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;
}
不幸的是,constructThird 不能将 a 和 b 作为参数。
是的,只需要有一个
T
的构造函数,无论你放在那里的值是什么。鉴于您显示的代码,我假设您可能希望该参数为0
。如果您想要构造函数有多个参数,您可以将 T(arg1, arg2, arg3)
作为默认值。
是的!
但是你至少应该知道 T 可能是什么,否则它就没用了。
不能为函数设置模板参数的默认值,即这是禁止的:
template<typename T=int> void f(T a, T b);