Veriadic templates
数量不定的模板参数
声明方式:
告诉编译器.该函数接受模板参数 -> 两组
-
第一组是
T -
第二组是
args-> 个数不确定.只有在传入的时候才知道具体有几个
调用代码:
源代码里面的print(args...),实际上会把args...在传给print函数.进行递归打印
要知道后面的args具体有几个可以用方法sizeof...()
关键字auto
这是一个语法糖,由编译器去自动推断返回值类型
/*
在没有关键字auto之前声明类型
*/
list<string> c
list<string>::iterator ite;
ite = find(c.begin(), c.end(), target);
有了auto关键字以后
list<string> c;
auto ite = find(c.begin(), c.end(), target); // 他就回去自动推断find函数的返回类型
// auto不能拿来声明变量类型,auto在使用的同时变量必须同时赋值 -> 以下就是错误的
list<string> c;
auto ite;
ite = find(c.begin(), c.end(), target);
ranged-base for
新的for循环模式:
声明形式:
for (decl : coll) {
statement;
}
for的左边必须声明一个变量.右边coll必须是一个容器
编译器会从右边的容器coll找出每一个元素.把每一个元素设置到左边的变量上.然后去做下面的内容
这个写法就不需要像之前的写法一样.找到容器的长度(类似forEach)
示例代码:
vector<double> vec;
for (auto elem : vec)
{
cout << elem*3 << endl; // 传递的是值给到elem
}
如果elem每一个*3,不会影响到vec里面的内容.因为传递的是值
示例代码2:
vector<double> vec;
for (auto& elem : vec)
{
elem *= 3; // 这里就会影响到vec里面的内容,因为传递的是引用 -> 指针地址
}
It's a lonely road!!!

浙公网安备 33010602011771号