是否可以在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