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

C++ template with default parameters

本文关键字:参数 默认 C++      更新时间:2023-10-16

我尝试在我的模板中使用默认参数,如下所示

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

为什么会这样?

我从堆栈 溢出问题中提取了这个答案 函数模板的默认模板参数

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

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

阅读堆栈溢出问题以了解更多信息。注意:函数模板C++中的默认参数是 gnu++0x 中的一个新功能。