[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

<未完待续>

时间: 2024-12-10 14:35:58

[C++11] Effective Modern C++ 读书笔记的相关文章

Effective Modern C++ 读书笔记 Item 1

最近发现了<Effective Modern C++>这本书,作者正是大名鼎鼎的Scott Meyers——<Effective C++>.<Effective STL>的作者. 而就在C++11逐渐普及,甚至是C++14的新特性也进入大家的视野的时候,<Effective Modern C++>一书应运而生.此书与其前辈一样,通过数十个条款来展开,只不过这次是集中于C++11和C++14的新特性.auto.decltype.move.lambda表达式……

effective modern C++读书笔记

类型推导: 1.ParamType是reference或pointer,不是universal reference 有引用则忽略引用,其余部分匹配T template <typenmae T> void f(T& param); int x = 27; const int cx =x; oonst int& rx = x; f(x);//T is int, paramtype is int& f(cx);//T is const int, paramtype is co

[.NET] 《Effective C#》读书笔记(二)- .NET 资源托管

<Effective C#>读书笔记(二)- .NET 资源托管 简介 续 <Effective C#>读书笔记(一)- C# 语言习惯. .NET 中,GC 会帮助我们管理内存,我们并不需要去担心内存泄漏,资源分配和指针初始化等问题.不过,它也并非万能,因为非托管资源需要我们自己进行清理,如文件句柄.数据库连接.GDI+ 对象和COM 对象等. 目录 十二.推荐使用成员初始化器而不是赋值语句 十三.正确地初始化静态成员变量 十四.尽量减少重复的初始化逻辑 十五.使用 using

《Effective C++》 读书笔记之三 资源管理

<Effective C++> 读书笔记之三 资源管理 准备知识: 所谓资源就是,一旦用了它,将来必须还给系统.最常用的资源是动态分配内存,其他常见的资源有文件描述器.互斥锁.图形界面的字形和笔刷.数据库连接以及网络sockets. auto_ptr 是个"类指针对象",就是所谓的智能指针,其析构函数自动对其所指对象调用delete.auto_ptr位于 #include <memory> 头文件.由于auto_ptr被销毁时会自动删除它所指之物,所以一定要注意

《Effective C++》 读书笔记之四 设计与申明

<Effective C++> 读书笔记之四 设计与申明 条款18:让接口容易被正确使用,不易被误用. 重点: 好的接口很容易被正确使用,不容易被误用.你应该在你的所有接口中努力达成这些性质. "促进正确使用"的办法包括接口的一致性,以及与内置类型的行为兼容. "阻止误用"的办法包括建立新类型.限制类型上的操作,束缚对象值,以及消除客户的资源管理责任. tr1::shared_ptr支持定制型删除器.这可防范DLL问题,可被用来自动解除互斥锁等等. 20

《Effective C++》读书笔记汇总

我之前边读<Effective C++>边写下每个条款的读书笔记,这一版是C++11之前的版本.这里我将每个条款令我印象深刻的点小结一下. 1.C++包括:Plain C(面向过程).OOP(面向对象).模板(泛型和模板元编程).STL(C++标准库). 2.用inline.enum.const代替#define.#define定义的宏,一旦复杂起来,高手都很难掌控.不要带入C的习惯. 3.灵活使用const前缀.不需要进行改变的数据加上const前缀.指针的const前缀有两种形式,cons

《Effective java》—–读书笔记

2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并发.JVM.分布式之类的.在今年面试的时候深受打击,到处都是问分布式.集群的?难道现在工作两三年的都这么牛逼了?都在搞分布式.集群之类的? 2016书单如下: 1.深入理解Java虚拟机:JVM高级特性与最佳实践-(已看,预计今年看三遍) 2.Oracle查询优化改写技巧与案例-(已看) 3.Eff

〈Effective C++〉读书笔记--Introduction

Introduction 1.Learning the fundamentals of a programming language is one thing; learning how to design and implement effective programs in that language is something else entirely. 想起<重构>里面说的一句话,写出计算机能理解的代码很容易,但是写好人能理解的代码不容易 2.A declaration tells c

《More Effective C++》读书笔记

http://www.cnblogs.com/tianyajuanke/archive/2012/11/29/2795131.html 一.基础议题(Basics) 1.仔细区别 pointers 和 references 当一定会指向某个对象,且不会改变指向时,就应该选择 references,其它任何时候,应该选择 pointers. 实现某一些操作符的时候,操作符由于语义要求使得指针不可行,这时就使用引用. 二者之间的区别是:在任何情况下都不能用指向空值的引用,而指针则可以:指针可以被重新