带有默认参数的C ++模板

时间:2012-05-17 14:02:59

标签: c++ templates

我尝试在模板中使用默认参数,例如

#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

的函数模板中使用

为什么会这样?

1 个答案:

答案 0 :(得分:1)

我从Stack Overflow问题 Default template arguments for function templates 中提取了这个答案:

引用C ++模板:完整指南(第207页):

  

当模板最初添加到C ++语言时,显式   函数模板参数不是有效的构造。功能   模板参数总是必须从调用中推断出来   表达。结果,似乎没有令人信服的理由   允许默认函数模板参数,因为默认值为   总是被推断出的价值所覆盖。

阅读the Stack Overflow question以了解更多信息。注意:函数模板C ++中的默认参数是gnu ++ 0x中的新功能。