Last Updated on 2020年7月20日
… Read More月度归档:2018年10月
C++模板编程简述
Last Updated on 2020年7月22日
模板作为一个C++中的一个高级特性,广泛应用于各种场合,以尽可能弥补自身作为编译语言的动态能力.然而,除非必要,模板应当尽可能的简单,避免本末倒置.
模板使用基础
- 模板特性是编译器和链接器相互配合实现的.这可以辅助我们理解它的特性.
- 编译期实例化时
- 模板类型参数通常得是完全类型.
- 模板非类型参数必须是constexpr
- 在模板编程中,编译器对
T::foo
型语法分析可能会有歧义,例如,T::vl * p
这样的语句可能是使用T
的静态成员做乘法,也可能是创建一个T::vl
C++ OOP编程综述
Last Updated on 2020年4月15日
嵌套类和局部类
- 定义在类X内的类Y称为嵌套类,它就是一个普通类,只不过使用的作用域被限制了.
- 定义在函数内的类Y称为局部类,这种类限制很多,主要用于在语言层面支持Lambda,实践中基本不用.
struct和class的内存布局
- C++的struct和class实例大小不会为0,即便它内部没有任何成员函数或成员变量.主要是因为编译器总是需要为实例分配内存,不占内存的实例是不存在的
- 数据成员全为全public,无构造函数,无类内初始值,不使用继承及virtual的类,称为聚合类.聚合类可以通过
{}
进行逐成员初始化 - 如果需要把sturct或class对象通过C风格直接从内存层面管理(如memcpy),那么就必须要求它的内存布局是平凡的(标准的),这写类型称为POD. 标准库中,is_pod
::value可以判断其是否是可以直接操作的 - 如果类内存在多个
public
或private
声明,则编译器可能重排该类的内存布局(移动部分对象),这将导致成员排布和程序员的预期产生差异.