是否可以在C++中为模板函数的变量定义默认值?C++模板函数默认值
类似下面:
template<class T> T sum(T a, T b, T c=????)
{
return a + b + c;
}
是否可以在C++中为模板函数的变量定义默认值?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;
}
你也可以把在T(5)如果你期待一个完整的类型,并希望默认值为5.
是的!
但是你至少应该知道T可能是什么或者它是无用的。
你不能设置为功能模板参数的默认值,即该禁止:
template<typename T=int> void f(T a, T b);
是的,那里只需要一个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; }
第一种情况,它只假定T
是默认可构造的。对于价值初始化(IIRC)且基本上为0
的POD类型,因此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'兼容,只要通过明确的论证就没有问题。 – 2010-07-21 18:19:59