C++ sizeof
空类的大小为1个字节 C++标准规定,任何两个不同的对象都必须在内存中拥有不同的地址。 如果一个空类的大小为0,那么当你创建一个空类的数组时,所有元素的地址都会相同,这就无法区分它们了。为了保证对象实例的唯一性,编译器会为空类分配一个字节的最小内存空间。 #include <iostream> using namespace std; class A{}; int mai...
空类的大小为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) 容器特性 顺序特性 ...
C++ 中 map 提供的是一种键值对容器,里面的数据都是成对出现的。 每一对的第一个值称之为关键字key,每个关键字只能在map中出现一次; 第二个值称之为关键字的对应值。 基本概念 std::map 是关联式容器,存储键值对(key-value) 键唯一,自动排序 底层实现:红黑树(平衡二叉搜索树) 常见应用:字典、映射表、频率统计、索引查找 Map使用 ...
C++ 不包含多线程应用程序的任何内置支持。相反,它完全依赖于操作系统来提供此功能。 假设您使用的是 Linux 操作系统,我们要使用 POSIX 编写多线程 C++ 程序。POSIX Threads 或 Pthreads 提供的 API 可在多种类 Unix POSIX 系统上可用,比如 FreeBSD、NetBSD、GNU/Linux、Mac OS X 和 Solaris。 下面的例...
以下的信号动作被定义在C++头文件<csignal>中 信号 描述 SIGABRT 程序的异常终止,如调用 abort。 SIGFPE 错误的算术运算,比如除以零或导致溢出的操作。 SIGILL ...
预处理器是一些指令,指示编译器在实际编译之前所需完成的预处理。 所有的预处理器指令都是以井号(#)开头,只有空格字符可以出现在预处理指令之前。预处理指令不是 C++ 语句,所以它们不会以分号(;)结尾。 define预处理 #define 预处理指令用于创建符号常量。该符号常量通常称为宏,指令的一般形式是: #define macro-name replacement-text ...