5 三个C++11新特性
5.1 variadic templates
模板参数可变化,其语法为 ...
(加在哪看情况)
// 当参数pack里没有东西了就调用这个基本函数结束输出
void print() {
}
// 用于打印多个参数的可变参数模板函数
template <typename T, typename... Args>
void print(const T& first, const Args&... args) {
std::cout << first << " ";
print(args...); // 使用剩余参数进行递归调用
}
int main() {
print(1, "Hello", 3.14, "World");
return 0;
}
还可以使用 sizeof...(args)
来得到参数pack里的数量
5.2 auto
编译器通过赋值的返回值类型,自动匹配返回类型
![image-20230808080207006](https://i-blog.csdnimg.cn/blog_migrate/133a7a11d8207fb782eb8217fc01ad57.png)
注:下面这样是不行的,第一行编译器找不到返回值类型
auto ite; // error
ite = find(c.begin(), c.end(), target);
5.3 ranged-base for
for
循环的新语法,for(声明变量 : 容器)
,编译器会从容器中依次拿出数据赋值给声明变量中
for (decl : coll)
{
statement
}
//例
for (int i : {1, 3, 4, 6, 8}) // {xx,xx,xx} 也是c++11的新特性
{
cout << i << endl;
}
注意:改变原容器中的值需要 pass by reference
vector<double> vec;
...
for (auto elem : vec) //值传递
{
cout << elem << endl;
}
for (auto& elem : vec) //引用传递
{
elem *= 3;
}