BlueRoseNote/02-Note/读书笔记/深入应用C++11代码优化与工程级应用/深入应用c++11代码优化与工程级应用第七章.md
2023-06-29 11:55:02 +08:00

2.2 KiB
Raw Blame History

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字节当然也可以自己实现这里提供一个案例。

7.4.3 利用alignas指定内存对齐大小

7.4.4 利用alignof和std::alignment_of获取内存对齐大小

7.4.5 内存对齐的类型std::aligned_storage

7.5 c++11新增便利算法