C++ extern
作用 extern用来声明一个在别的地方定义的变量或函数 它不会创建新的对象或函数实体,只是告诉编译器它的定义存在于别的源文件中 使用 int count = 42; // 定义全局变量 #include <iostream> extern int count; // 声明这个变量在别的文件中定义 int main() { std::cout <&...
作用 extern用来声明一个在别的地方定义的变量或函数 它不会创建新的对象或函数实体,只是告诉编译器它的定义存在于别的源文件中 使用 int count = 42; // 定义全局变量 #include <iostream> extern int count; // 声明这个变量在别的文件中定义 int main() { std::cout <&...
C++位域(Bit Field)是一种允许在结构体(struct)或联合体(union)中以位为单位分配存储空间的特性,用来节省内存或实现与硬件寄存器的精准映射 基本语法 strcut Example { unsigned int a : 3; // a占3位 unsigned int b : 5; // b占5位 unsigned int c : 8; // c占8位 } 在...
volatile是一个类型修饰符,作用是告诉编译器: 这个变量的值随时可能被外部因素改变(不是由当前代码逻辑控制),因此 编译器不要对它进行优化,每次使用时都必须从内存中重新读取,而不是使用寄存器或缓存的值。 基本语法 volatile int x; 声明x是一个易变变量 使用场景 硬件寄存器访问 在嵌入式编程里,硬件寄存器的值可能随时由...
assert是一个运行时调试宏,定义在头文件<cassert>中 在C语言中则定义在<assert.h> 基本作用 assert(expr)会检查expr是否为真 如果expr == true,那么什么都不会发生,程序继续执行 如果expr == false,那么程序会打印错误信息,并调用abort()来终止程序 示例 #include...
空类的大小为1个字节 C++标准规定,任何两个不同的对象都必须在内存中拥有不同的地址。 如果一个空类的大小为0,那么当你创建一个空类的数组时,所有元素的地址都会相同,这就无法区分它们了。为了保证对象实例的唯一性,编译器会为空类分配一个字节的最小内存空间。 #include <iostream> using namespace std; class A{}; int mai...
引用与指针 引用 指针 必须初始化 可以不初始化 不能为空 可以为空 不能更换目标 可以更换目标 引用必须初始化,而指针可以不初始化 int &r; ...
定义 虚函数是基类中使用virtual关键字声明的成员函数,允许在派生类中重写(override),并在运行时通过动态绑定(dynamic dispatch)来决定实际调用哪个版本的函数 #include <iostream> using namespace std; class Animal { public: virtual void speak() { //...
static有两种类别: 静态变量: 函数中的变量,类中的变量 静态类的成员: 类对象和类中的函数 静态变量 函数中的静态变量 当变量声明为static时,变量的空间将在程序的生命周期内分配 即使多次调用该函数,静态变量的空间也只分配一次 类中的静态变量 类中声明为static的变量只被初始化了一次,在单独的静态存储中分配了空间,所以类中的静态变量由对象共享 对于...
常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 const作用 可以定义常量 const int a = 100; 类型检查 const常量与#define宏定义常量的区别:const常量具有类型,编译器可以进行安全检查;#define宏定义没有数据类型,只能简单的字符串替换,不能安...
vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。 vector的用法类似于Python中的list数据类型。 基本概念 std::vector是动态数组,支持随机访问 内存连续存储,支持下标操作 插入/删除尾部效率高,在中间或头部插入效率低 会自动扩容,容量(capacity) ≥ 元素个数(size) 容器特性 顺序特性 ...