C++11friend语法扩展
改进部份可以不用加class关键字,也可以使用类型别名。就是这点小小的改动,但程序员可以为类模板声明友元。
改进部份可以不用加class关键字,也可以使用类型别名。就是这点小小的改动,但程序员可以为类模板声明友元。
在C++98标准中,对非静态成员变量使用sizeof是不能够通过编译的。
在C++11之前只有动态断言,也就是程序必须要运行,才能知道问题。这种方式就不大利于程序的编写调试。
委拖构造函数可以解决什么呢?为什么要新增?
一.C++98/03设计目标
二.C++11设计目标
C++11相比于C++98/03增加增强了哪些?
C++11编程范式支持很多有:
alignas关键字用来设置内存中对齐方式,最小是8字节对齐,可以是16,32,64,128等。
test2占用16字节,对齐方式alignas(8)?
test3占用16字节,对齐方式alignas(16)
test4占用32字节,对齐方式alignas(32)
计算方法就是对齐数的整数倍,比如32位对齐,实际数据大小不到32字节,但内存还是占用32字节。实际数据大于32字节小于64字节,内存占用64字节。
在之前写C++代码时,比如声明嵌套模板(vector里面存的还是vector),这时就会有两个尖括号出现。就会与运算符>>搞混,C++要求在声明嵌套模板时使用空格将尖括号分开。
C++11之前类成员初始化,都是通过构造函数,现在C++11可以直接在类成员定义时初始化,像java一样。接下来看一段代码来体会下类成员初始化。
类成员初始化代码例:
C++11新增类成员初始化方式:
C++11新增类成员初始化与构造函数:
nullptr关键字就是表示空指针的意思,C++11之前空指针都是NULL。已经有了NULL哪为什么还要有nullptr关键字?
nullptr表示空指针,不能转换为整型类型。为了向后兼容,C++11仍允许用0(NULL)来表示空指针。建议使用nullptr而不是0(NULL),因为更高的类型安全。
关键字decltype将变量的类型声明为表达式指定的类型。下面的语句的含义是,让y的类型与x相同,其中x是一个表达式。decltype (x) y;decltype的工作原理比auto复杂,可以指定类型为引用和const。