2010-09-29 65 views

回答

6

(3)是形成不良的,因爲

C++ 03 [Section 14.1/11]說

如果模板參數具有默認模板參數,所有後續的模板參數應該有一個缺省模板參數提供

+2

很好的答案+1。我在哪裏可以獲得該標準的副本? – JoshD 2010-09-29 17:25:41

+0

@JoshD:你可以在這裏找到它(http://www.open-std.org/jtc1/sc22/wg21/)(ISO/IEC 14882 2003是C++ 03) – 2010-09-29 17:27:24

+0

@JoshD:AFAIK你可以沒有免費的。但是,您可以查看下一個標準的草稿。 – ybungalobill 2010-09-29 17:28:10

8

出於同樣的原因:

void f(int = 0, int); 

失敗。

沒有辦法使用第三版本的默認參數:

template<class T = int, class U> class B { ... }; 

B<, short> var; // ??? no such syntax 
6

如果你將它放入一些情況下,第三種方式實際上可能是法律,規定,第二默認前面已經給出。

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

是的,好的,+1。 – 2010-09-29 17:44:15