我尝试在模板中使用默认参数,例如
#include <iostream>
using namespace std;
template <typename S, typename T=int>
S myadd(T a, T b)
{
S tmp = a + b;
return tmp;
}
int main()
{
int a = 1, b = 2;
float i = 5.1, j = 5.2;
cout << myadd<int, int>(i, j);
cout << myadd<float>(a, b);
return 0;
}
然后是g ++ myadd.cpp
显示错误:
默认模板参数不能在没有-std = c ++ 0x或-std = gnu ++ 0x
的函数模板中使用
为什么会这样?
答案 0 :(得分:1)
我从Stack Overflow问题 Default template arguments for function templates 中提取了这个答案:
引用C ++模板:完整指南(第207页):
当模板最初添加到C ++语言时,显式 函数模板参数不是有效的构造。功能 模板参数总是必须从调用中推断出来 表达。结果,似乎没有令人信服的理由 允许默认函数模板参数,因为默认值为 总是被推断出的价值所覆盖。
阅读the Stack Overflow question以了解更多信息。注意:函数模板C ++中的默认参数是gnu ++ 0x中的新功能。