第一章 使用C++11让程序更简洁、更现代

1.1  类型推导

1.1.1  auto类型推导

1、auto关键字的新意义

  不同于python等动态类型语言的运行时进行变量类型的推导,隐式类型定义的类型推导发生在编译期。它的作用是让编译器自动推导出这个变量的类型,而不需要显示指定类型。

下面是auto的一些基本用法:

 auto x = ;                               //ok:x是int类型
auto pi = new auto();      //ok:pi被推导为int*
const auto *v = &x, u = ; //ok:v是const int*类型,u是const int 类型
static auto y = 0.0; //ok:y是double类型
auto int r; //error:auto不再表示存储类型指示符
auto s; //error:auto无法推导出s的类型

上面的代码中:字面量5是一个const int类型,变量x将被推导为int类型(const被丢弃,后面做说明),并被初始化为5;pi的推导说明auto还可以被用于new操作符;对于v和u的推导需要注意两点(1)虽然经过前面的const auto *v = &x的推导,auto的类型可以确定为int了,但是u仍然必须要写后面的“= 6”,否则编译将报错。(2)u的初始化不能编译器推导产生二义性。例如,把u的初始化改为“u = 6.0”,编译器将被会报错。

  使用auto声明的变量必须马上初始化(或者已经初始化完了,如上面的引用),以让编译器推导出它的实际类型,并在编译时将auto占位符替换为真正的类型。

2、auto的推导规则

  auto可以结合指针、引用一起来使用,还可以带上cv限定符(cv-qualifier、const和volatile限定符的统称)。下面再看一些例子:

1.1.2  decltype关键字

1.1.3  返回类型后置语法---auto和decltype的结合使用

【读书笔记】深入应用C++11代码优化与工业级应用 读书笔记01的更多相关文章

  1. PHP学习笔记 - 进阶篇(11)

    PHP学习笔记 - 进阶篇(11) 数据库操作 PHP支持哪些数据库 PHP通过安装相应的扩展来实现数据库操作,现代应用程序的设计离不开数据库的应用,当前主流的数据库有MsSQL,MySQL,Syba ...

  2. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记

    机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...

  3. 读书笔记 effective c++ Item 11 在operator=中处理自我赋值

    1.自我赋值是如何发生的 当一个对象委派给自己的时候,自我赋值就会发生: class Widget { ... }; Widget w; ... w = w; // assignment to sel ...

  4. 《C专家编程》读书笔记之第8~11章

    八.为什么程序员无法分清万圣节和圣诞节 1. 整形提升是指char,short int和位段类型(无论signed或unsigned)以及枚举类型将被提升为int或unsigned int(如果int ...

  5. Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作

    (11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require ...

  6. 学习笔记之IKM C++ 11

    https://github.com/haotang923/interview/tree/master/IKM Q1. If most of the calls to function foo() b ...

  7. C++学习笔记16,C++11中的显式的默认构造函数以及显示删除默认构造函数

    在早期的C++中.假设须要一些接受一些參数的构造函数,同一时候须要一个不接收不论什么參数的默认构造函数.就必须显示地编写空的默认构造函数.比如: //tc.h class A{ private: in ...

  8. [DeeplearningAI笔记]卷积神经网络4.11一维和三维卷积

    4.4特殊应用:人脸识别和神经网络风格转换 觉得有用的话,欢迎一起讨论相互学习~Follow Me 4.11一维和三维卷积 二维和一维卷积 对于2D卷积来说,假设原始图像为\(14*14*3\)的三通 ...

  9. 关于BenchMark/c++11计时器/Chrome:tracing 的一些笔记

    A benchmark is a test of the performance of a computer system. ​ 基准测试是对计算机系统的性能的测试 计时器 性能的指标就是时间,在c+ ...

随机推荐

  1. 【SpringBoot】整合Redis实战

    ========================9.SpringBoot2.x整合Redis实战 ================================ 1.分布式缓存Redis介绍 简介: ...

  2. 学习Unity -- 理解依赖注入(IOC)三种方式依赖注入

    IOC:英文全称:Inversion of Control,中文名称:控制反转,它还有个名字叫依赖注入(Dependency Injection).作用:将各层的对象以松耦合的方式组织在一起,解耦,各 ...

  3. 算法实践--最小生成树(Prim算法)

    前一篇介绍了一种最小生成树的算法--Kruskal算法,本篇介绍另一种Prim算法 算法描述 定义V为端点的集合,A为最小生成树,初始为空.对于每个端点v初始的Key[v]=∞, Parent[v]= ...

  4. windows server系统查看tomcat版本

    线上服务器系统是windows server版本,由于tomcat进行了apache httpd集群,所以对tomcat进行了统一编号: 在jprofiler中需要监听一个server实例,需要先搞清 ...

  5. [UE4]UMG小结

    一.当没有需要的UI怎么办?先别急着自己定制,可以到虚幻商城去看看,各种类型的UI都有,而且价格都不贵. 二.推荐一个比较有参考价值的UI:User Interface Kit,里面的UI很多,还有小 ...

  6. UE4 UMG

    转自:https://www.cnblogs.com/kadaj/p/6412937.html 1.创建关卡类 1.创建C++类继承LevelScriptActor 2.打开关卡蓝图 Class Se ...

  7. python http请求及多线程应用

    目录 概述 tomorrow包准备 运行环境遇到的问题 其他尝试未果 概述 今天, 使用python3 模拟下发包, http get 请求, 然后 采用tomorrow 多线程. 代码如下: # c ...

  8. 快速傅立叶变换(FFT)算法

    已知多项式f(x)=a0+a1x+a2x2+...+am-1xm-1, g(x)=b0+b1x+b2x2+...+bn-1xn-1.利用卷积的蛮力算法,得到h(x)=f(x)g(x),这一过程的时间复 ...

  9. psi

    purchase 采购sales 销售inventory 库存 outstock/instock/inventory taking outstock/instock/inventory 出库 入库 盘 ...

  10. centos6.5部署redmine3.2

    ruby 2.1 + rails 4.2+ mysql 5.6 +centos6.5 + rvm 1.29 1.基本的软件环境 yum -y install libyaml-devel zlib-de ...