1模板右尖括号优化:在C++11以前会看成右移运算符
#include<iostream>
#include<map>
using namespace std;template<typename T>
class base {
public:void print(T& it){auto i = it.begin();for (; i != it.end(); i++)cout << i->first << " " << i->second << endl;}};int main()
{map<int, int>m;m.insert(make_pair(1, 1));m.insert(make_pair(2, 2));m.insert(make_pair(3, 3));m.insert(make_pair(4, 4));base<map<int, int>>b; //在C++11之前,这里会报错,>>会看成右移运算符,需要+一个空格;b.print(m);return 0;
}
2默认模板参数
优先级:
<>指定——类型推导——默认——没有默认类型,也没有推导就是报错
#include<iostream>
using namespace std;template<typename T=int, T t = 123> // T = int 是为模板参数 T 提供了一个默认类型。
class base {
public:void show(){cout << "t->" << t << endl;}};template<typename T = int,typename U = char> //在C++11是不支持这种的
void f(T t=123,U u='a') //默认的函数参数不能用于推导
{cout << t << " " << u << endl;
}int main()
{base<int, 1024> p;p.show();base<char, 'Q'>b;b.show();f('a','b'); //自动推导f<int>('a', 'v'); //没有指定第二个类型,所以int属于t,u自动推导,自动推导>默认f<int, int>('i', 'j'); //两个都指定f(); //两个都默认值 如果上面T=int没有了,就一个T,这个就报错return 0;
}