0

我尝试在我的模板中使用默认参数,就像这样

#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 的函数模板中使用

为什么会这样?

4

1 回答 1

1

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

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

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

阅读Stack Overflow 问题以了解更多信息。注意:函数模板 C++ 中的默认参数是 gnu++0x 中的一个新特性。

于 2012-05-17T14:17:45.253 回答