C++基础
文章平均质量分 63
问号小朋友
这个作者很懒,什么都没留下…
展开
-
实现一个shared_ptr和unique_ptr来深入了解C++11 的“最小GC”特性
C++11新特性的智能指针,是C++提供的最小垃圾回收的机制,是一个模板,可以管理指针,并实现自动释放的效果,抹开标准库中对于其它场景的思考, 其核心原理是机制,即对于对象的清理在于其引用的个数进行判断,如果没有对象引用这个堆空间,即的时候,就会将其释放。而是独占, 无法拷贝和赋值,只能以移动语义传播,下面是一个简化版的和模板,用于理解和的运行原理...原创 2022-06-29 17:11:37 · 369 阅读 · 0 评论 -
CRTP奇异递归模型——用普通函数的性能来实现C++的多态性(静态多态)
**CRTP (奇异递归模板)**能以一种小于虚函数开销的方式来实现多态,但是这种多态是静态多态,就是类型的确定时发生在编译期的,这种写法能减小虚函数的性能开销,但是他的缺陷是不适用于哪些运行时的多态,即类型是在运行时才能确定的情况是不适用于静态多态的。比如如下一段代码这就是一个简单的利用虚函数来实现多态,这种多态的实现是利用在和来进行具体函数的跳转,是一种运行时的动态多态优点很明显,能封装具体的类型,通过一个统一的接口而调用不同方法,但是实现虚函数需要的性能开销相比于普通函数,往往是普通函数的几倍。而对原创 2022-06-29 15:50:20 · 208 阅读 · 0 评论 -
C++11新特性——基于范围的for循环
了解这个c11新特性,写出高性能的遍历代码!原创 2022-06-22 00:44:36 · 668 阅读 · 0 评论 -
一文深入理解C++运算符的重载
一文帮助深入理解C++运算符的重载声明Rational有理数类运算符重载是C++的一个十分有意思的特性,能使除了基本变量之外的,其他的C++类声明也能实现基本的运算,下面将从一个有理数类Rational的实现与扩展,在这个类的深入设计过程中思考运算符的运用,以达到深入理解C++运算符重载的目的,有理数Rational相比于double能更精确地表示一个数据,实现一个Rational类能提供一种精确表达的方法, 但是Rational并不是C++的基本类型,需要我们手动实现,下面为Rational用例图的定原创 2022-04-11 13:25:30 · 1060 阅读 · 0 评论 -
C语言内存模型
C语言内存模型C语言程序的内存模型分为下面五个,分别为:text segmentdata segmentbssstackheaptext segment(代码段)text segment简称为文本段,又叫代码段(code segment),存放指令的地方,这一部分内存区域是可读(read - only)的,因为一个程序在被写好之后,其执行逻辑也是相同的。所以一般程序被加载到内存中来,其代码段有且仅被加载一次。无法改变data segment(数据段)data segment又称为原创 2022-02-05 10:29:50 · 1085 阅读 · 4 评论 -
C++指针
指针A pointer: It is a variable that store the memory address of the variable指针是一个变量,但是里面存储的是另一个变量的内存地址,里面存储的是一个变量的内存地址,它的大小与操作系统的位数有关,64位操作系统指针大小为8字节,32位为4字节不同类型的指针对于都是指向变量的首地址,其涵盖的地址范围是不一样的,int *p和long *p类型是不一样的通过指针获得值叫做解引用int a = 10;int *p = &原创 2022-02-05 00:19:36 · 691 阅读 · 0 评论 -
函数指针深入探索
函数指针再探问题提出函数指针的本质是什么?函数指针的效率和直接调用一样吗? 为什么?函数指针可以跟模板结合吗?函数指针可以作用于静态函数、成员方法、静态方法、纯虚函数、lamda吗?不能的话有什么方法解决?除了函数指针外还有哪些代码可以实现类似功能?探索函数指针本质是什么?引用维基百科上记录的对函数指针的定义,其上是这样说到的A function pointer, also called a subroutine pointer or procedure pointer is a原创 2022-01-10 01:14:27 · 369 阅读 · 0 评论 -
C++函数指针用法
C++函数指针详细理解函数指针初识函数指针是指向函数的指针,并不等于函数,它能够执行函数的操作,可以跟指针变量一起来理解,其基本声明格式为:type (*ptrname)(形参列表);例子,声明一个比较两个字符串大小的函数指针bool (*cp)(const string s1, const string s2);需要注意的是,**不要去掉括号!!!**如果去掉括号,含义就变成了返回一个bool指针的函数的声明!函数指针指向函数类型再使用函数指针时,函数指针可以发挥与函数相同的功效,即原创 2022-01-06 00:27:25 · 7415 阅读 · 2 评论 -
C++调试帮助
C++调试帮助assert断言头文件#include<cassert>格式assert(表达式);assert可用于在调试或测试程序时对程序运行环境进行判断,或者执行其它的一些辅助判断操作,比如辅助调试,帮助调试信息,如果assert里面的表达式返回0(false),程序会终止运行,如果表达式返回1(true),程序会什么也不做,接着执行后面的语句#include<cassert>#include<iostream>using namespace原创 2022-01-04 00:15:52 · 594 阅读 · 0 评论 -
C++构造函数初探
C++构造函数构造函数初始化列表构造函数格式ClassName(形参列表)初始化列表{ 函数体}区分初始化与赋值的概念初始化和赋值是两个不同的概念,两者之间会涉及到底层效率的问题int a = 10; // 这是对整型变量a进行初始化,就算后面没有=10,a还是会被初始化,初始值为0int b; // 初始化整型变量bb = 20; // 这是赋值操作从上面的代码可以看到,初始化和赋值完全是两个概念,前者直接初始化数据成员,后者是先初始化再赋值,多了一个步骤,所原创 2022-01-03 01:27:10 · 628 阅读 · 0 评论 -
C++类与对象——拷贝构造函数
C++拷贝构造函数问题引入#include<iostream>using namespace std;class A{public: A(int a,int b):a(a),b(b){} void printA(){ cout<<"class A.value a is:"<<a<<endl; } void printB(){ cout<<"class A.value原创 2022-01-01 02:56:20 · 350 阅读 · 0 评论 -
左值引用与右值引用
左值引用与右值引用**左值:**在一定作用域中是可以寻址的就叫左值,比如变量、函数返回的引用类型、函数返回的const类型int x = 10; // x是左值int& add(int a, int b){ return a+b;} // add函数返回的值是一个左值const int add1(int a, int b){ return a+b;} // add1函数返回的const类型也是一个左值**右值:**临时的,不可以寻址的,只用于临时存储原创 2022-01-01 00:58:10 · 57 阅读 · 0 评论 -
可变参数头文件<stdargs.h>使用
可变参数头文件stdarg.h#include<stdarg.h> // 导入这个库,允许函数里面定义非固定长度的可变参数三个宏和一个变量类型va_list: 保存传入的参数数据va_start: 一个宏定义va_arg: 一个宏定义va_end: 一个宏定义// 用法type method(type1 arg1, type2 arg2, type3 lastarg, ...){ // ... 代表不定参数,其前面的lastarg就是最后一个确定参数原创 2021-11-10 20:06:37 · 887 阅读 · 0 评论 -
C++基础——IO库基础
C++学习——IO库基础IO处理通过继承封装了不同输入输出流读取的细节,其继承关系为#mermaid-svg-vfNR5uEIxowMKr5Z .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-vfNR5uEIxowMKr5Z .label text{fill:#333}#mermaid-svg-vfNR5原创 2021-05-24 00:20:34 · 459 阅读 · 2 评论 -
C++基础——const限定符
C++基础——const限定符1、const限定符const限定符的含义是:修饰类型为常量,即用const限定符修饰的变量为不可改变的量,它可以作用于很多的类型上面,基本类型、结构体类型,指针等等const修饰基本变量类型const修饰基本变量类型代表着被修饰的变量有且只能被初始化一次int main(){ const int a; //没有进行初始化,会报错,必须进行初始化 return 0;}int main(){ const int a = 10;原创 2021-05-19 13:08:25 · 399 阅读 · 0 评论