C++ C++;带有默认参数的模板
我尝试在模板中使用默认参数,如下所示C++ C++;带有默认参数的模板,c++,templates,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 <&l
#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;
}
#包括
使用名称空间std;
模板
S myadd(T a,T b)
{
S tmp=a+b;
返回tmp;
}
int main()
{
INTA=1,b=2;
浮点数i=5.1,j=5.2;
我从StackOverflow问题中提取了这个答案:
引用C++模板:完整指南(第207页):
模板最初添加到C++语言时,显式
函数模板参数不是有效的构造。函数
模板参数必须始终可以从调用中推断出来
因此,似乎没有令人信服的理由
允许默认函数模板参数,因为默认值
始终由推导值覆盖
注意:函数模板C++中的缺省参数是GNU+0x.</P>中的一个新特性。在错误消息中你不理解什么?你尝试编译什么?你不知道为什么?为什么是因为“在没有-std=c++0x或-std=gnu++0x的函数模板中不能使用默认模板参数”。这只是一个猜测,但您是使用-std=c++0x或-std=gnu++0x编译的吗?在这种情况下为什么需要默认的T?T可以从参数的类型中扣除。@LuchianGrigore我只是在终端中使用g++和g++myadd.cpp。