C++学习笔记2
1.Static知识点
static是一个修饰符,可以修饰变量,函数。
静态变量: 函数中的变量,类对象
静态类的成员: 类中的变量和类中的函数
- 静态变量
对于static修饰的变量,其生命周期是整个程序的生命周期。
- 类中的变量
类中的静态变量,所有类对象共享, 使用A::a这样在类外进行初始化,构造函数不能进行初始化
- 类中的函数
类中的静态函数,我们一般使用A::fun这样进行调用,当然我们也可以使用类对象.这样调用。静态函数所有对象实例共享,不能访问非静态数据和函数。
2.this 知识点
(1)一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。
(2)this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时候也是加上this的,它作为非静态成员函数的隐含形参,对各成员的访问均通过this进行。
在类中,静态成员函数不存在this指针。
const成员函数的this指针是 const A* const类型
普通成员函数的this指针是 A* const 类型
3.assert知识点
断言,是宏,而非函数。assert 宏的原型定义在 (C)、(C++)中,其作用是如果它的条件返回错误,则终止程序执行。可以通过定义 NDEBUG 来关闭 assert,但是需要在源代码的开头,include 之前。
#include <stdio.h>
#include <assert.h>
int main()
{
int x = 7;
x = 9;
assert(x==7);
return 0;
}
断言主要用于检查逻辑上不可能的情况。例如,它们可用于检查代码在开始运行之前所期望的状态,或者在运行完成后检查状态。与正常的错误处理不同,断言通常在运行时被禁用。
忽略断言, 在代码开头加上:
#define NDEBUG // 加上这行,则 assert 不可用
4.union知识点
联合(union)是一种节省空间的特殊的类,一个 union 可以有多个数据成员,但是在任意时刻只有一个数据成员可以有值。当某个成员被赋值后其他成员变为未定义状态。联合有如下特点:
- 默认访问控制符为 public
- 可以含有构造函数、析构函数
- 不能含有引用类型的成员
- 不能继承自其他类,不能作为基类
- 不能含有虚函数
- 匿名 union 在定义所在作用域可直接访问 union 成员
- 匿名 union 不能包含 protected 成员或 private 成员
- 全局匿名联合必须是静态(static)的
利用union测试主机的大小端