1)template <class T = int, class U = double> //compiles
2)template <class T, class U =double> //compiles
3)template <class T = int, class U> //fails
爲什麼1和2會編譯而3不會?模板代碼中的默認類型參數錯誤
1)template <class T = int, class U = double> //compiles
2)template <class T, class U =double> //compiles
3)template <class T = int, class U> //fails
爲什麼1和2會編譯而3不會?模板代碼中的默認類型參數錯誤
(3)
是形成不良的,因爲
C++ 03 [Section 14.1/11
]說
如果模板參數具有默認模板參數,所有後續的模板參數應該有一個缺省模板參數提供。
出於同樣的原因:
void f(int = 0, int);
失敗。
沒有辦法使用第三版本的默認參數:
template<class T = int, class U> class B { ... };
B<, short> var; // ??? no such syntax
如果你將它放入一些情況下,第三種方式實際上可能是法律,規定,第二默認前面已經給出。
template <class T, class U = double>
struct X;
template <class T = int, class U> //here
struct X {};
int main()
{
X<> x;
X<float> y;
X<char, char> z;
}
是的,好的,+1。 – 2010-09-29 17:44:15
很好的答案+1。我在哪裏可以獲得該標準的副本? – JoshD 2010-09-29 17:25:41
@JoshD:你可以在這裏找到它(http://www.open-std.org/jtc1/sc22/wg21/)(ISO/IEC 14882 2003是C++ 03) – 2010-09-29 17:27:24
@JoshD:AFAIK你可以沒有免費的。但是,您可以查看下一個標準的草稿。 – ybungalobill 2010-09-29 17:28:10