1. auto关键字

auto关键字起到的作用是自动类型判断。在声明变量的时候根据左值可以判断出类型并自动为此变量选择相匹配的类型。比如:

#include <iostream>
#include <string>
#include <queue>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <functional>
using namespace std;int main()
{int a = 10;auto b = a;cout << b << endl;system("pause");return 0;
}

上面的代码中编译器就会判断a的类型并赋予给b。但是显然如果单纯这么用,编译器已经知道上述的左值的类型了,其实并没有用的必要。auto一般可以用于迭代器,类模板这种不好判断参数类型的地方:

#include <iostream>
#include <string>
#include <queue>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <functional>
using namespace std;int main()
{map<int, int> mp;mp.insert(make_pair(1, 3));mp.insert(make_pair(5, 7));mp.insert(make_pair(10, -1));mp.insert(make_pair(3, 5));mp.insert(make_pair(2, 4));for (auto m = mp.begin(); m != mp.end(); m++){cout << m->first << " " << m->second << endl;}system("pause");return 0;
}

或者类模板的情景:

#include <iostream>
#include <string>
#include <queue>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <functional>
using namespace std;/*
在类模板场景中,因为不能确定模板对应的类型,用auto在实际编译过程中确定,这样会很方便。
*/
template<typename T>
class testauto{
public:testauto(){}~testauto(){}void print(T t1, T t2);
};template<typename T>
void testauto<T>::print(T t1, T t2){auto res = t1 * t2;//不知道T实际什么类型,所以用auto代替cout << res << endl;
}int main()
{testauto<int> t;int a = 5;int b = 10;t.print(a, b);system("pause");return 0;/*输出:50*/
}

需要注意的是,和const常量一样,auto定义一个变量初始化。auto a = 10;是可以的,但是单独定义一个auto a;是不行的。

2. 范围for语句:

for语句是一种循环语句,本身很常见。但是范围for语句更加简化了for循环遍历的过程。它可以和auto连用,也可以和单独的类型一起使用。举例如下:

#include <iostream>
#include <string>
#include <queue>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <functional>
using namespace std;int main()
{vector<int> vec{ 1, 2, 3, 4, 5, 6, 7 };for (int num : vec){cout << num << " ";}cout << endl;vector<char> vecchar{ '1', 'a', 'v', 'c' };for (auto c : vecchar){cout << c << " ";}cout << endl;system("pause");return 0;/*输出:1 2 3 4 5 6 71 a v c*/
}

3. decltype

decltype可以用于求变量和函数表达式的类型。如下:

#include <iostream>
#include <string>
#include <queue>
#include <vector>
#include <map>
#include <unordered_map>
#include <set>
#include <unordered_set>
#include <functional>
using namespace std;int func(int a, int b){return a + b;
}int main()
{int a = 5;double b = 10;decltype(a) a1;//a1类型是intdecltype(b) b2;//b2类型是doubledecltype(func(a, b)) c;//c类型是int,是函数返回值的类型system("pause");return 0;
}

C++11常见新特性相关推荐

  1. 从Folly源码学C++ 11的新特性

    两年前Facebook发布了他们的C++库,命名为Folly,这是一个在Facebook内部广泛和可重复使用的C++库组件大集合. 但很多成熟的C++开源库已经存在了,为什么又引进一个呢?除了这个库的 ...

  2. C++11 的新特性

    C++11 的新特性 1 变量和基本类型 1.1 long long 类型 扩展精度浮点数,10位有效数字 1.2 列表初始化 初始化的几种不同形式,其中用花括号来初始化变量称为列表初始化: 比如: ...

  3. atitit.Oracle 9 10 11 12新特性attilax总结

    atitit.Oracle 9  10 11  12新特性 1. ORACLE 11G新特性 1 1.1. oracle11G新特性 1 1.2. 审计 1 1.3. 1.   审计简介 1 1.4. ...

  4. C++11 标准新特性:委派构造函数

    https://www.ibm.com/developerworks/cn/rational/1508_chenjing_c11/index.html 陈 晶 2015 年 8 月 11 日发布 We ...

  5. C++11 标准新特性: 右值引用与转移语义(点评)

    <<C++11 标准新特性: 右值引用与转移语义>> 原文地址如下 http://www.ibm.com/developerworks/cn/aix/library/1307_ ...

  6. C++11学习 新特性之 “=default” 、“=delete”

    文章目录 1. =default 和=delete 概述 2. 类与默认函数 3. 使用"=delete"来限制函数生成 4. "=default"使用范围 1 ...

  7. Java复习第11天---11.4---Java8新特性---Stream流常用方法3和综合案例

    Java复习第11天---11.4---Java8新特性---Stream流常用方法3和综合案例 目录 文章目录 1.count:计数-终结方法 2.limit:取前几个元素-延迟方法 3.skip: ...

  8. Java复习第11天---11.3---Java8新特性---Stream流特点和常用方法2

    Java复习第11天---11.3---Java8新特性---Stream流特点和常用方法2 目录 文章目录 1.Stream流特点 2.filter:过滤 3.map:映射 ***后记*** : 内 ...

  9. Java复习第11天---11.2---Java8新特性---Stream流获取方式和常用方法1

    Java复习第11天---11.2---Java8新特性---Stream流获取方式和常用方法1 目录 文章目录 1.Stream流的2中获取方式 1.1.集合的stream方法 1.2.Stream ...

最新文章

  1. Java二进制位运算、移位运算、、
  2. 【PP生产订单】收货Goods Receipt
  3. 富贵包这种常见颈椎病怎么改善?
  4. 找回root密码--Mysql5.6.36
  5. tcpdump 用法
  6. dotnetCore增加MiddleWare的Run,Use Map MapThen四个扩展方法
  7. 【LeetCode - 141142】环形链表(i和ii)(快慢指针,链表)
  8. (22)css3新增边框圆角属性border-radius
  9. js排序算法详解-选择排序
  10. 错误提示:java.lang.IllegalArgumentException解决方法
  11. 基于DEAP库的python进化算法-6.遗传算法中的约束处理
  12. 电力拖动(工厂电气控制)实验装置
  13. java获取文件名格式 / java获取文件名后缀
  14. GOlang将华氏温度转换为摄氏温度的函数
  15. 一个简单的点赞功能的实现
  16. 手把手教你绘制自定义地图
  17. 百度移动营销页常见问题汇总,99%的人不知道
  18. Android Studio 光标莫名其妙加粗后,与 insert 键相反的问题
  19. 漫漫大学江湖录 - 爱与恨唯与工作更交织
  20. APP如何变现?主流变现方式有这些

热门文章

  1. python资料-大牛分享python资料
  2. 学python有什么用-为什么要学Python?学了有什么用?
  3. python基础代码大全-python基础语法,python 代码命令大全
  4. 一文看懂语音识别 - ASR(基本原理 + 4个实现流程)
  5. webdriver 等待页面加载完成_Python爬虫,登陆神器Selenium等待(waits)页面加载的三种方法...
  6. element-ui主表格多选后 二级弹框表格默认全选数据
  7. 企业class类命名规范
  8. C++实现由二元组建立图的邻接表
  9. AS打开卡住、一直加载的问题
  10. 通过Stratus 服务器在Flash Player中使用RTMFP 开发P2P应用