大致看完了<<深入理解c++11>>这本书籍,终结一下心得:
总的来说c++11有很多优秀的特性是和boost,python,java类似的,就不如boost里面的智能指针,lambda匿名函数等已经加入到c++11的标准了,还有python的元组,原生字符串R等也引入到了c++11的标准了,下面详细列一下c++11中我觉得对自己挺有用的特性:
1.c++11中加入了__func__的功能,表示在哪个函数,在python等语言也有这样的功能,可以和__LINE__,__FILE__结合使用方便调试代码;
2.c++11中引入了新的数据类型long long,unsigned long long等类型可以表示更长的数据类型;
3.c++11中可以使用assert调试代码,当发布版本是可以定义NDEBUG宏来取消assert函数,这时候编译器会优化掉assert相关的代码,对调试代码,和发布release版本是很有用的;
4.c++11中引入了noexcept修饰符,表示修饰的函数不允许抛出异常,这对控制程序的逻辑是很有帮助的,用法就不具体介绍了;
5.c++11引入了override和final,分别表示还函数是重写父类的函数,和该函数是最终的函数,不允许子类重写,否则会编译报错,使用它们一来可以是程序更加的安全,二来提高代码的可读性,看到它们就一目了然了该函数有怎样的特性;
6.当基类有很多的自定义的构造函数,派生类为了使用它们就需要使用初始化列表来穿便基类的构造函数,这样是很麻烦的,c++11为了减少代码量,增加了继承构造函数的特性,即在构造函数中使用using Base::Base;的方式来继承基类的构造函数,可以给程序员带来很多遍历;
7.c++11中还引入了委派构造函数的功能,当构造函数中有相同的代码时,可以使用委派构造函数来减少代码冗余,用法是以一个构造函数为目标构造函数,一些初始化操作都写在这里,其他的构造函数则不需要写,只需要在初始化列表中使用该委派构造函数就可以了,具体用法可以参考c++11的书籍;
8.c++11还引入了移动构造函数的功能,移动构造函数主要用于将亡值占用资源和释放资源的效率问题,具体用法就是在拷贝构造函数的参数上多加一个&即&&,使用移动构造函数可以提高效率,类试使用引用提高效率;
9.c++11支持在类中进行初始化,而不一定都要使用初始化列表,对编写代码带来很多的遍历;
10.c++11支持类型自动推到auto,当遇到长的类型时,可以使用auto,也给编程代码很多的遍历;
11.c++11加强了for关键字的功能,可以和python,java,boost类似,可以这样使用for(auto val:List){};
12.c++11引入了boost智能指针的支持,如shared_ptr,weak_ptr等;
13.c++11加强了常量表达式,推荐使用const static int xxx = 1代替宏;
14.c++11加强了枚举类型,enum class Type{xx1,xx2},即在原来枚举类型基础上加了class,这样的加强的枚举来下,可以说是类型安全的,应该尽量使用加强的枚举类型;
15.c++11映入了nullptr的支持这是比NULL更好的空值,用于声明空指针,它的类型时nullptr_t,如果是空指针应该尽量使用nullptr来代替NULL,0,他是更安全的空值;
16.当声明了自定义的构造函数时,编译器就不会生成默认的一系列的构造函数了,这是就需要手动声明会显得有点不方便,c++11引入了=default,可以让函数产生默认版本,还有=deleted关键字,可以删除该函数避免隐式装换,可以用于成员函数和普通函数,也可以使用explicit来避免构造函数的隐式转换,但是不能同时使用=deleted和explict;
17.c++11中还引入了匿名函数lambda的支持,类似于boost,python等的匿名函数的功能,用于stl和算法中还是很常用的;
18.c++11中还引入了不同字节编码直接转换的函数功能如mbrtoc16,c16rtomb等函数;
19.c++11中还引入了原生字符串的功能,如R,uR等,类似于python等语言的原生字符串的功能;
以上介绍的c++11的特性都是非常常用的特性,在代码程序中应该尽可能的多用这些特性,我觉得python中有的特性,在c++11中大多数都包含了进来,比如元组等在c++11中也是有的,在编程中应该尽可能的用这些特性,比如:
c++11,stl,算法algorithm,boost等。
当然c++11中还有其他不错的特性比如atomic,多线程,decltype,还有为了方便泛型编程的一系列的特性就不一一列举了,上面列的特性都是非常常用的,在代码中应该尽可能的使用它们.