![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++基础
文章平均质量分 51
就着嘎巴菜喝大碴粥
这个作者很懒,什么都没留下…
展开
-
C++内存对齐
内存对齐编译器将程序中的每个“数据单元”安排在字的整数倍的地址指向的内存之中对齐原则结构体变量的首地址能够被其最宽基本类型成员大小与对齐基数中的较小者所整除。 结构体每个成员相对于结构体首地址的偏移量 (offset) 都是该成员大小与对齐基数中的较小者的整数倍,如有需要编译器会在成员之间加上填充字节 (internal padding)。 结构体的总大小为结构体最宽基本类型成员大小与对齐基数中的较小者的整数倍,如有需要编译器会在最末一个成员之后加上填充字节 (trailing pa原创 2021-09-08 15:48:31 · 115 阅读 · 0 评论 -
C++内存分类
1 栈存放的数据:局部变量,函数参数,返回地址等。默认初始值:无默认初始值,为随机值。分配者:有编译器自动分配。分配大小:在程序开始后分配固定大小的栈空间,如果申请空间大于剩余栈空间,那么分配失败。生长方向:栈空间的生长方向是从高地址向低地址生长,即后申请的变量的地址小于先申请的变量的地址。溢出:如果新申请的变量小于剩余栈空间(因为分配是固定的栈大小),就会溢出。特点:系统自动分配,申请效率高,但程序员无法控制。是否连续:连续。分配过程:原创 2021-09-08 15:40:42 · 253 阅读 · 0 评论 -
C++内存管理
C++内存分区主要为:堆,栈,全局/静态存储区,常量存储区,代码区。栈:存放函数的局部变量,函数参数,返回地址等,由编译器自动分配和释放。 堆:动态申请的内存空间,就是由malloc分配的内存块(C++中可用new),由程序员控制其分配和释放,如果程序执行结束之后还没有释放,那么操作系统会自动将其回收。 全局/静态存储区:存放全局变量和静态变量,程序结束之后操作系统自动将其释放,在C语言中,该存储区分为.bss段和.data段,未初始化的放在.bss段中,初始化的放在.data段,在C++中不再区分原创 2021-09-01 16:48:10 · 71 阅读 · 0 评论 -
C++指针注意事项
指针占用空间32位操作系统下指针占用四个字节的空间. 64位下占用8个字节.const 指针组合const修饰指针 --- 常量指针声明const T *p = xxx;特点指针指向可以修改, 但是指针指向的值不可以修改.比如:int a = 10;int b = 20;const int *p = &a;*p = 20; // 非法, 指针指向的值不可以修改p = &b; // 合法原创 2021-08-20 15:03:28 · 204 阅读 · 0 评论 -
C++数据的一些注意事项
1常量1.1 宏常量通常定义在文件头部语法#define 加常量名加常量值 (不可修改)1.2 const语法const 常量类型 常量名 = 常量值; (不可更改)1.3 const和define的区别编译器处理方式不同对于#define, 编译器会在预处理阶段把所有宏替换成所定义的东西, 并不是给其分配内存.类型和安全检查不同#define仅仅作替换, 不会做类型检查. 而const定义的常量有具体的数据类型, 编译阶段也会进行类型检查.存储方式...原创 2021-08-20 14:53:46 · 134 阅读 · 0 评论 -
C++的一些关键字
volatile用volatile声明的变量, 是通知编译器, 该变量为时刻变化的变量, 编译时不要对其进行优化, 每次使用该变量的时候必须从其地址进行读取. (以下是个人理解)一般在多线程中的状态变量会被该关键字声明.而标准使用场景是:并行设备的硬件寄存器(如:状态寄存器) 一个中断服务子程序中会访问到的非自动变量(Non-automatic variables) 多线程应用中被几个任务共享的变量externextern在变量或者函数前声明如果在一个变量或者函数声明前加上了ext原创 2021-08-20 14:49:22 · 95 阅读 · 0 评论 -
C++编译过程
1.g++基本步骤:1.1 预处理将.cpp源文件预处理为.i文件。g++ -E test.cpp -o test.i //生成预处理后的.i文件1.2 编译将.i文件编译为.s的汇编文件。使用-S选项,只进行编译而不进行汇编,生成汇编代码。g++ -S test.i -o test.s //生成汇编.s文件1.3 汇编由汇编器as...原创 2019-07-22 16:21:10 · 2027 阅读 · 0 评论 -
C++智能指针
1 智能指针设计目的工程中经常会碰到以下两种情况:1.指针指向了一段内存2.给指针在堆区上给指针分配了一段内存.第一种情况的时候, 可能不只一个指针指向了该内存, 这样如果该内存已经被释放, 再用该指针使用该段内存的时候就会出现异常问题. 第二种情况, 给指针在堆区分配了一段内存, 需要手动释放, 但是如果程序在释放之前异常退出了, 同样会造成内存泄露. 所以智能指针的需求就出来了.2 智能指针分类在stl里面有四种智能指针,auto_ptr、unique_ptr、shared_p.原创 2021-02-02 15:58:53 · 127 阅读 · 0 评论 -
enum和enum class
1 enum不同枚举类型的变量之间不能互相赋值, 如下测试代码:enum enumType1 { Value1_1, Value1_2, Value1_3};enum enumType2 { Value2_1, Value2_2, Value2_3};int main() { enumType1 eT1 = Value1_1; enumType2 eT2 = Value2_1; //eT1 = eT2; //不可以原创 2021-02-02 14:02:58 · 322 阅读 · 0 评论 -
C++ STL 容器的一些总结 --- set(multiset)和map(multimap)
set原创 2020-12-28 17:05:19 · 135 阅读 · 0 评论 -
C++ STL 容器 string
1 stringstring内部含有一个char*字符串原创 2020-12-23 14:59:33 · 133 阅读 · 1 评论 -
C++ STL 中提供的算法
1 算法1.1 for_each()参数有三个:首迭代器 尾迭代器 执行的函数例如如下代码:#include <algorithm> //必须包含#include <vector>using namespace std;int main() { vector<int> tmp; tmp.push_back(10); tmp.push_back(20); tmp.push_back(30); tmp.原创 2020-12-23 14:32:08 · 436 阅读 · 0 评论 -
C++ STL一些注意事项
1 STL简介STL(standard template library: 标准模板库), 主要有六大组件:容器 算法 迭代器 仿函数 适配器(配接器) 空间配置器2容器3 算法4 迭代器原创 2020-12-23 13:59:07 · 136 阅读 · 0 评论 -
C++ STL 容器 vector
1 vector简介顺序存储, 初始化过程会分配一定量空间, 在尾部插入会很快, 但是在中间插入元素, 会把之后所有元素向后平移, 所以较慢(中间删除元素同理). 如果元素个数超过当前限制, 会重新分配更大空间, 再把原容器中所有元素都拷贝到新的容器中.优点: 支持随机访问(用下标访问), 性能较好 缺点: 除了操作尾部元素, 增删中间元素性能较差...原创 2020-12-23 11:19:45 · 114 阅读 · 0 评论 -
C++模板的注意事项
1 函数模板template <typename T> //把typename换成class也可以使用过程中, 有两种方法调用, 如下:自动类型推导:#include <iostream>template <class T>void swap(T &first, T &second) { T temp; temp = first; first = second; second =.原创 2020-12-22 16:05:55 · 333 阅读 · 1 评论 -
C++中类和对象的一些注意事项 --- 多态
1. 一些继承中的问题1.1 多继承中父类含有重名成员问题如下:#include <iostream>#include <string>using namespace std;class father1 {public: father1() { class_name = "father1"; } string class_name;};class father2 {public: father2() {原创 2020-12-18 16:51:18 · 271 阅读 · 1 评论 -
C++中类和对象的一些注意事项 ---继承
1 继承中的访问权限问题所有继承方式, 子类都无法访问父类的private成员.那么用如下测试代码尝试一下:#include <iostream>using namespace std;class father {public: int m_father_public_value;protected: int m_father_protected_value;private: int m_father_private_value;};clas原创 2020-12-18 16:46:17 · 206 阅读 · 1 评论 -
C++中类和对象的一些注意事项
目录1. struct和class的区别2. 构造函数一些注意事项3. 深拷贝和浅拷贝4. 静态成员4.1 静态成员变量4.2 静态成员函数5. 类所占用的空间大小6. const修饰6.1 const修饰成员函数6.2 const修饰对象7. 友元7.1 全局函数作友元7.2 类作友元7.3 类中成员函数作友元8. 继承8.1 继承中的访问权限问题8.2 继承后的子类和父类的析构顺序问题8.3 父类子类的同名成员处理方法8..原创 2020-12-17 16:11:14 · 696 阅读 · 0 评论 -
C++ STL 容器的一些总结
1C++ STL类型及实现原理1.1 顺序容器容器中的元素为有序排列,可以指定元素插入位置.1.1.1 vector顺序存储, 初始化过程会分配一定量空间, 在尾部插入会很快, 但是在中间插入元素, 会把之后所有元素向后平移, 所以较慢(中间删除元素同理). 如果元素个数超过当前限制, 会重新分配更大空间, 再把原容器中所有元素都拷贝到新的容器中.优点: 支持随机访问(用下标访问), 性能较好 缺点: 除了操作尾部元素, 增删中间元素性能较差1.1.2 deque同vector.原创 2020-12-23 11:04:56 · 377 阅读 · 0 评论 -
C++文件读写
FILEfopenfclosefseek原创 2020-12-21 16:44:11 · 319 阅读 · 0 评论