[C++11] Effective Modern C++ 读书笔记
本文记录了我读Effective Modern C++时自己的一些理解和心得。
item1:模板类型推导
1)reference属性不能通过传值参数传入模板函数。这就意味着如果模板函数需要一个reference类型的参数,必须在模板声明中将其声明为reference,否则,即使使用一个reference类型的变量调用模板函数,类型推导的结果将不带reference属性。
2)constant和volatile属性也不能通过传值参数传入模板函数,但是可以通过reference参数传入这些属性。
3)如果在模板中声明universal reference参数,那么左值参数会被推导成左值引用,右值参数会被推导成universal reference(&&)。
4)数组型变量和函数型变量会通过传值参数推导成相应的指针型变量。而如果在模板中声明为传引用参数,则会被推导成数组引用(包含数组大小信息)和函数引用。
item2:auto类型推导
1)auto类型推导规则和模板类型推导规则相同,除了处理以{}初始化的参数的情况。
2)模板不能推导被{}初始化的参数,除非将它声明为std::initializer_list<T>类型的参数。
#include <iostream>
template<typename T>
void f1(T param) { return; }
template<typename T>
void f2(std::initializer_list<T> param) { return; }
int main()
{
auto i = { 1, 2, 3, 4 };
f1(i); // good
//f1({ 1, 2, 3, 4 }); //error
f2({ 1, 2, 3, 4 }); //good
return 0;
}
3)在C++14中,返回值为auto类型的函数不得返回以{}初始化的值。lambda函数的auto类型参数也不能以{}初始值作为参数调用。
auto f1() { return 4; } //good
auto f2() { auto i = {1,2,3,4}; return i; } //good
error auto f3() { return {1,2,3,4}; } //error
item3:理解decltype
1)decltype不加任何修改地返回参数的类型
2)decltype的典型应用是保持左值的引用属性
item4 :如何查看推导类型
1)方法有:从IDE编辑器查看,编译错误诊断,运行时输出。
2)std::type_info容易出错,推荐使用boost::typeindex。
item5:推荐使用auto,而不是显式声明类型
1)使用auto可以确保变量被初始化。
2)使用auto可以避免因为隐式的类型转换而生成临时变量。
3)使用auto可以确保类型一定是对的,例如size()的类型和迭代器(iterator)的类型。
4)使用auto使代码简洁。
item6:哪些地方不要用auto
1)特殊的数据类型,例如std::vector<bool>。凡是有看不见的代理类(invisiable proxy class)的情况都要慎用auto。
2)需要显示指定类型的推荐用法是:
auto x = static_cast<type>(initializer)
这样可以明确表示此处发生了类型转换。
<未完待续>
[C++11] Effective Modern C++ 读书笔记的更多相关文章
- [.NET] 《Effective C#》读书笔记(二)- .NET 资源托管
<Effective C#>读书笔记(二)- .NET 资源托管 简介 续 <Effective C#>读书笔记(一)- C# 语言习惯. .NET 中,GC 会帮助我们管理内 ...
- Modern Algebra 读书笔记
Modern Algebra 读书笔记 Introduction 本文是Introduction to Modern Algebra(David Joyce, Clark University)的读书 ...
- 《More Effective C++ 》读书笔记(二)Exception 异常
这事篇读书笔记,只记录自己的理解和总结,一般情况不对其举例子具体说明,因为那正是书本身做的事情,我的笔记作为梳理和复习之用,划重点.我推荐学C++的人都好好读一遍Effective C++ 系列,真是 ...
- 《More Effective C#》读书笔记
<More Effective C#>这本书,大概是四年前看完的,但只整理了一部分读书笔记,后面有时间的话,会陆续补充的. More Effective C# :使用泛型 More Eff ...
- 《More Effective C++》读书笔记(零)Basic 基础条款
这是篇读书笔记,只记录自己的理解和总结,一般情况不对其举例子具体说明,因为那正是书本身做的事情,我的笔记作为梳理和复习之用,划重点.我推荐学C++的人都好好读一遍Effective C++ 系列,真是 ...
- 《Effective Java》读书笔记 - 11.序列化
Chapter 11 Serialization Item 74: Implement Serializable judiciously 让一个类的实例可以被序列化不仅仅是在类的声明中加上" ...
- 《Effective java》-----读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...
- 《Effective Java》读书笔记(一)之创建和销毁对象
最近在研读<Effective Java>一书,读书不做点笔记,感觉很容易就忘掉,于是用本篇博客来记录阅读此书的笔记. 郑重声明: 由于是<Effective Java>一书的 ...
- 《effective c++》读书笔记(上)
最近在读<Effective C++>,确实是经典之作,但是有的条款也需要一些细节补充,所以都列在这篇文章里,希望能不断更新,个人阅读的是第三版,不包括C++ 11的内容. 条款1:视C+ ...
随机推荐
- 黄聪:PHP json_encode中文乱码解决方法
相信很多人在使用Ajax与后台php页面进行交互的时候都碰到过中文乱码的问题.JSON作为一种轻量级的数据交换格式,备受亲睐,但是用PHP作为后台交互,容易出现中文乱码的问题.JSON和js一样,对于 ...
- [Android NDK/JNI-1A]-开发环境搭建
NDK简介 NDK能干什么:NDK使得在android中,java可以调用C 函数库. 1.Android平台从诞生起,就已经支持C.C++开发.众所周知,Android的SDK基于Java实现,这意 ...
- AP_AP系列 - 相关设定的简述(概念)
2014-07-08 Created By BaoXinjian
- 实现读入一个彩色视频文件并以灰度格式输出这个视频文件,学习opencv例2-10
#include "cv.h"#include "highgui.h"int main(int argc,char* argv[]){ //书本中的main没有 ...
- JAVA类的构造方法
1,构造方法没有返回类型, 定义: []public] 方法名() {} 2,一个构造方法如果想调用同一类中的另一个构造方法,只能调用一个,并且要放在构造方法第一行 3,用this调用,如 publi ...
- 实现从sql server存取二进制图片
转:http://www.cnblogs.com/jeffwongishandsome/archive/2009/08/27/1554440.html 1.存取图片(1).将图片文件转换为二进制并直接 ...
- 更改EGit的user settings中默认的location
在系统的环境变量中添加变量HOME,值为C:\Users\Kane.Sun\ 记得要讲users改为首字母大写,不然可能会有问题.
- python 正则表达式 demo
1.匹配大小写和数字,并且大小写数字均要有,且字符串长度为6~20位 ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[a-zA-Z\d]{6,20}$ import repattern ...
- 《一课经济学》书摘笔记IV
有出口,才有钱进口:没有进口,就没有机会出口,因为外国人没有美元可以用来买美国的产品.要想扩大出口,就必须有更多的进口,否则收不到货款.要想压缩进口,出口也会随之被压缩.所以,当我们决定减少进口的时候 ...
- angularJs的ui-router总结
一:跑通ui-router. ui-router源码在最后面 跑通后的样子: 这个不解释了,都是很基本的东西. 二:切换视图: 这里的name可以不写,但是你得放到state的第一个参数里. 跑起来后 ...