![](https://img-blog.csdnimg.cn/20200421215544426.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
C++程序设计
内容包括C++语法和STL源码
知非而进
掉进水里不会死,待在水里会死
展开
-
C++进阶 | 智能指针详解
目录智能指针自实现智能指针auto_ptr,scoped_ptr,unique_ptr1、auto_ptr(不推荐)2、scoped_ptr(不推荐)3、unique_ptr(推荐)智能指针的交叉引用问题多线程访问共享对象问题自定义删除器智能指针首先来看一个裸指针:int *p=new int(10); //在堆内存上申请一个int型数组,大小为10,用指针p指向数组的起始地址。*p=30; //这里可以通过指针解引用,来修改p指向地址的值。delete p;原创 2020-07-05 15:11:07 · 538 阅读 · 0 评论 -
C++基础 | 初识模板和空间配置器Allocater
目录前言函数模板模板特例化用模板来开发一个简易的Vector容器前言单纯地直接写一个普通函数适用性比较小,比如int compare(int a,int b),这个函数直接比较了整型变量a和b的大小。但是如果你有了新需求,想比较两个double型数字的大小,那么之前我们讲过重载,很容易想到重载来满足这个需求。但是我们写代码当然追求省,毕竟懒是人生学习的动力。这种情况使用重载会造成不必要的代码冗余,毕竟参数都一样。那么这次来学习一下模板是如何节省代码的。首先来看重载的情况:bool compare(i原创 2020-06-24 20:29:03 · 789 阅读 · 1 评论 -
C++基础 | 全面解析const用法
前言本文将全面分析const这一C++语法的所有相关用法,包括:const、const指针、const引用、在函数当中的引用const怎么理解?C和C++中const的区别?在C++中,const所修饰的量叫做常量,必须初始化,且初始化完毕之后是不能被修改的,即const修饰的量不能作为左值。const int a=20;这里的a将不能再被修改,也可以再这样描述:a=30;这里是非法的。在C中,const修饰的量叫常变量,不叫常量。const 仅仅在语法层级限制a不能被写成赋值,即仅仅不能写成a=原创 2020-06-22 16:32:08 · 344 阅读 · 0 评论 -
C++基础 | 深入理解函数重载
什么是函数重载?1、首先是定义:一组函数,其函数名相同,但是函数参数个数或者类型不同,那么这组函数就是重载函数。比如下面这组函数:int compare(int a,int b){ cout<<"this is compare int"<<endl; return a>b;}int compare(double a,double b){ cout<<"this is compare double"<<endl;原创 2020-06-21 16:02:30 · 153 阅读 · 0 评论 -
C++基础 | inline内联函数
前言对于C++程序,需要预编译、编译、汇编、链接四个步骤才能成为可执行文件进而运行。而inline函数在编译期间执行。本文将结合上一节所说函数调用堆栈的开销,说明inline函数和普通函数的区别以及优点。普通函数调用堆栈int sum(int a,int b){ return a+b;}int ret3=sum(a,b);对于普通函数sum(a,b)的调用,会执行标准的函数调用过程:1、参数压栈2、开辟函数栈帧3、执行完毕回退函数栈帧inline函数调用堆栈...原创 2020-06-21 14:53:25 · 174 阅读 · 0 评论 -
c++基础 | 形参带默认值的函数
前言对于此类函数,一般的问法是,它与普通函数调用有什么区别?或者说优点?基本用法首先在写带默认值函数的时候,形参的默认值必须从右往左写。这点条件来自于函数调用堆栈,形参在入栈的时候是从右往左入栈的。以下为错误用法:int sum(int a=10,int b){ return a+b;}这里会报b没有默认值的错误剖析函数调用堆栈时的三种情况:1、函数形参不带默认值int sum(int a,int b){ return a+b;}int main(){原创 2020-06-21 12:53:41 · 829 阅读 · 0 评论