任何人都可以解释为什么在第三版 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)
这是编译器错误:
错误:函数中不能使用默认模板参数 模板