08 |优先选用nullptr,而非0或NULL
我们需要清楚的知道一件事情,就是0和NULL都不是指针类型,使用它们可以匹配不到指针类型的重载函数。但是nullptr就不一样了,虽然它的本质是std::nullptr_t,但是因为其可以隐式转换到所有类型的裸指针型别。所以在函数重载时,nullptr可以完美匹配指针型别的重载函数:void f(int);void f(bool);voi
2,3,4,5,6,7,8,9,10,11,12,13,14
我们需要清楚的知道一件事情,就是0和NULL都不是指针类型,使用它们可以匹配不到指针类型的重载函数。但是nullptr就不一样了,虽然它的本质是std::nullptr_t,但是因为其可以隐式转换到所有类型的裸指针型别。所以在函数重载时,nullptr可以完美匹配指针型别的重载函数:void f(int);void f(bool);voi
对象初始化的方式有很多种,特别是C++11新引入了统一初始化,可以用于一切场合的初始化,至少从概念上可以这么理解。目前常见的初始化方式大概有以下几种:int x(0);//使用小括号初始化int y = 0; //使用等号初始化int z{0};//使用C++11新引入的统一初始化格式,即大括号初始化int
虽然auto用起来确实好处多多,到那时也并不是万能的,在有些场景下,我们就不得不使用带显示型别的初始化。例如如下代码:std::vector<bool> features() { std::vector<bool> temp; f
第四章是无用的,这里暂时不整理了。废话补多少,直接总结一下使用auto的好处:1、对于变量未初始化情况,如果使用显示显示型别声明,程序猿将无感知,但是如果使用了auto进行变量声明,将提醒你编译错误。int x1; //有潜在的未初始化风险,编译器最多给告警auto x2; //未初始化,编译报错2、可以使用auto来表示只有编译器才知
decltype是C++11新增的一个关键字,它的主要用途是那些返回值依赖于形参型别的函数模板。一般来说decltype告诉你的结果与你预测的几乎相同,所以这里就不再累述,只需要记住以下几点即可:decltype(expression) var; 具体判断逻辑如下:(1)如果expression没有使用括号括起来,则类型与expressi
首先auto型别推导与模板型别推导完全相同,也是按照前面说的三种情况进行推导,唯一的区别是在对大括号括起来的表达式进行推导时,auto会将其推导为一个std::initializer_list<T>的类型。代码示例如下:auto x1 = 27;//x1型别为intauto x2(27); //x2型别为intauto x3&
C++98仅有一套型别推导,用于函数模板。C++11对这套规则进行了一些改动并增加了两套规则,一套用于auto,一套用于decltype。后来C++14又扩展了能够运用auto和decltype的语境。下面先重点讲一下auto关键字的使用语境:请允许我使用一小段伪代码来说明。函数模板的大致形如:template<Class T>