2.2 KiB
2.2 KiB
7.1 委托构造函数和继承构造函数
7.1.1 委托构造函数
委托构造函数允许在同一个类中一个构造函数可以调用另一个构造函数,从而可以在初始化时简化变量的初始化
class class_c
{
public:
int max;
int min;
int middle;
class_c(int my_max) { max = my_max > 0 ? my_max : 10; }
class_c(int my_max, int my_min) :class_c(my_max) {
min = my_min > 0 && my_min < max ? my_min : 1;
}
class_c(int my_max, int my_min, int my_middle) :class_c(my_max, my_min) {
middle = my_middle<max&&my_middle>min ? my_middle : 5;
}
};
7.1.2 继承构造函数
让派生类直接使用基类的构造函数
struct A:B
{
using B::B;
}
这个特性对普通函数也有效
7.2 原始字面量
string str="D:\A\B\test.test";
string str1="D:\\A\\B\\test.test";
string str2=R"()";
//输出
D:AB est.test
D:\A\B\test.test
D:\A\B\test.test
可以通过R直接得到原始意义的字符串,只有()中的才有效果
7.3 final和override
final用来限制某个类不能被继承,或者某个虚函数不能被重写
struct A{
virtual void foo() final;
}
struct B final:A{
}
override确保在派生类中声明的重写函数与基类的虚函数有相同的签名(一样的形参,防止写错),同时也表明将要重写基类的虚函数,还可以防止因疏忽把本来想重写积累的虚函数声明承载
7.4 内存对齐
7.4.1 内存对齐
主要讲了一些概念,以及msvc与gcc的内存对齐机制区别 http://blog.csdn.net/markl22222/article/details/38051483 我们经常会看到内存对齐的应用,是在网络收发包中。一般用于发送的结构体,都是1字节对齐的,目的是统一收发双方(可能处于不同平台)之间的数据内存布局,以及减少不必要的流量消耗。
7.4.2 堆内存的内存对齐
msvc下使用_aligned_malloc,使用默认的对齐大小,32位是8字节,64位是16字节,当然也可以自己实现,这里提供一个案例。