1.2.4 模板参数默认值
最新的C++(www.cppentry.com)11标准允许为函数模板参数赋默认值(此前只可为类模板参数赋默认值,第2章介绍)。在为func中无法根据函数参数推导的模板参数赋予默认值后,调用模板时的模板实参列表可以完全省略。例如将func的声明改为以下形式:
- template<typename T0 = float,
- typename T1,
- typename T2 = float,
- typename T3,
- typename T4>
- T0 func(T1 v1, T3 v3, T4 v4);
则在main函数中的调用可以写成以下形式:
- func(1, 2, 3);
- func('a', 'b', "cde");
但要编译带模板函数默认值的程序,需要支持最新标准的编译器。如笔者所用的GCC 4.6.1,需要在编译时开启参数“-std=c++0x”。
注意 为什么开启参数是c++0x?因为大家原本期望新标准可以在20世纪的第一个10年诞生,所以新一代C++(www.cppentry.com)标准原本的代号是C++(www.cppentry.com)0x。然而岁月在无休止的争论和审议中蹉跎,新标准最终通过ISO认定已经是2011年8月了,所以代号C++(www.cppentry.com)0x也改成了C++(www.cppentry.com)11。而在新标准通过之前,作者和厂商们已经提前使自己的编译器支持待定新标准加入到自己的编译器中。在标准出台后的编译器版本中(如GCC 4.7),开启新标准的选项已经改为“-std=c++11”。当然,为了向后兼容,旧选项依然有效。