为什么Stroustrup的书会演示默认的函数模板参数,这在当时是不允许的?

时间:2011-10-24 19:56:10

标签: c++ function-templates

任何人都可以解释为什么在第三版 C ++编程语言的第13章中,Stroustrup说明了函数模板的默认参数,尽管C ++(pre C ++ 11)不支持它们?这是Stroustrup在13.4.1节中给出的例子:

  

明确指定每个调用的比较是乏味的。幸运的是,很容易选择默认值,因此只需要明确指定不常见的比较条件。这可以通过重载来实现:

template<class T, class C>
int compare(const String<T>& str1, const String<T>& str2); // compare using C
template<class T>
int compare(const String<T>& str1, const String<T>& str2); // compare using Cmp<T>
     

或者,我们可以提供普通约定作为默认模板参数:

template <class T, class C = Cmp<T> >
int compare(const String<T>& str1, const String<T>& str2)

这是编译器错误:

  

错误:函数中不能使用默认模板参数   模板

1 个答案:

答案 0 :(得分:9)

作者本人在his web site上解释了这一点:

  

由于不幸的疏忽,标准只是禁止函数模板的模板参数的默认参数。投票在下一个标准中得到纠正。