C++具有默认参数的模板
C++ template with default parameters
我尝试在我的模板中使用默认参数,如下所示
#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 中的一个新功能。
相关文章:
- 使函数参数默认为周围范围
- 如何将值传递给其参数(默认参数)
- 当“std::make_index_sequence”和“std::index_sequence”用于模板参数默认类型时
- C ,构造器中允许的参考参数默认值
- 哪些规则控制参数默认赋值?
- 错误:上一个规范后给出的参数默认参数
- 是否可以设计一个包含模板参数默认值的类
- 构造函数中参数C++默认值
- 如何设置依赖于其他参数的参数默认值
- C++模板参数默认函数实现
- QInput对话框参数默认值
- g++4.8.2上列表方法参数默认初始化时出错
- 在函数定义中指定参数默认值会导致错误 C2143:语法错误:'='之前缺少')'
- 函数模板:将第一个模板参数默认为第二个
- 模板模板参数默认可以引用其他模板类型的参数
- 参数默认为先例参数的值
- 如何修改一个类,使它只有一个成员函数,所有参数默认
- 内置类型的模板参数默认值
- 是否可以使用构造函数或对象作为其他类方法的参数默认值?
- 模板参数默认为更高版本