C++11 新特性及原理(一、基础篇)
目录
引言
一转眼的功夫国庆7天假期已快结束,开始倒计时准备整理心情开始新的征程,几天的颓废终于开始清醒,整理下很久前的知识,打算把他们梳理成文章分享给大家,当然网上有很多类似的文章,希望我的角度能给大家带来新的理解。
开篇
C++11新增了100多个新特性,修补了C++98/03中的600多个缺陷,使C++11编写代码更加便捷更加高效和优雅。GCC从4.8.1才完全支持C++11标准,使用GCC4.8以上编译器编译时需要添加-std=c++11选项,才能开启编译器对C++11标准的支持。下文选取了一些C++11新特性,主要针对我们在实际开发场景中,以编码规范为基准,选择这些特征的原则如下:
1、优雅性:适当的使用该特性便于代码的阅读及维护(减少代码冗余)。
2、谨慎原则:该特性比较“安全”,没有太多的“坑”。
3、健壮及约束性:使用该特性,能让代码更加的健壮,提升编码质量。
4、高效性:使用该特性能提高代码执行效率,节省系统资源。
注意:以下代码均使用g++ (GCC) 4.8.5 20150623 (Red Hat 4.8.5-4) 版本进行的编译
一、auto 初始化类型推导(优雅性,修补缺陷)
早在C++98标准中就存在了auto关键字,那时的auto用于声明变量为自动变量,自动变量意为拥有自动的生命期,这是多余且极少使用的,因为就算不使用auto声明,变量依旧拥有自动的生命期。
C++11取而代之的是全新的auto,变量的初始化类型推导。
C++11 auto 举例:
auto nVal = 1; // int
auto fVal = 1.3284 + 6; // double auto会做隐式类型转换进行类型提升
auto strVal = "Hello World"; // string
const auto& strTmp = strVal; // const string&
std::unordered_multimap<std::string, std::string>::iterator dictIter = dict.begin();
auto dictIter = dict.begin(); // 等同于上面语句