C++
文章平均质量分 91
Dorby .
我只想要一个我想要的生活
展开
-
【转载】深刻理解内存屏障、指令重排
BackendGolangGolang Memory Model2020-06-09一、背景1.1 一个 Code Review 引发的思考一个同学在 Golang 项目里面用 Double Check(不清楚的同学可以去百度搜下,Java中比较常见)的方式实现了一个单例。具体实现如下:var ( lock sync.Mutex instance *UserInfo)func getInstance() (*UserInfo, error) {if instance ==转载 2022-04-28 16:34:33 · 1141 阅读 · 0 评论 -
牛客上C++的面试题和答案
作者:弑风之痕链接:https://www.nowcoder.com/discuss/578910来源:牛客网说一下C++和C的区别C++是面向对象的语言,而C是面向过程的结构化编程语言语法上:C++具有重载、继承和多态三种特性C++相比C,增加多许多类型安全的功能,比如强制类型转换、C++支持范式编程,比如模板类、函数模板等引用和指针的区别?指针是一个实体,需要分配内存空间。引用只是变量的别名,不需要分配内存空间。引用在定义的时候必须进行初始化,并且不能够转载 2021-02-08 20:02:39 · 2338 阅读 · 1 评论 -
C++substr函数
basic_string substr(size_type _Off = 0,size_type _Count = npos) const;substr是C++语言函数,主要功能是复制子字符串,要求从指定位置开始,并具有指定的长度。如果没有指定长度_Count或_Count+_Off超出了源字符串的长度,则子字符串将延续到源字符串的结尾。substr有2种用法:假设:string s = ...原创 2019-11-28 21:37:11 · 1808 阅读 · 0 评论 -
深入理解mutable、volatile关键字
volatile关键字mutable关键字在C++中,mutable也是为了突破const的限制而设置的。被mutable修饰的变量,将永远处于可变的状态,即使在一个const函数中。我们知道,如果类的成员函数不会改变对象的状态,那么这个成员函数一般会声明成const的。但是,有些时候,我们需要在const的函数里面修改一些跟类状态无关的数据成员,那么这个数据成员就应该被mutalbe来修饰...原创 2019-11-22 22:52:59 · 149 阅读 · 0 评论 -
多态
类型兼容规则1.派生类对象可以赋值给基类的对象。2.派生类的对象可以初始化基类的引用。3.派生类的对象的地址可以赋值给基类的指针变量。多态的分类1.重载多态:普通函数重载和成员函数重载。2.强制多态:强制类型转换。3.包含多态:通过虚函数实现。4.参数多态:通过虚函数实现。从实现角度分为:编译时多态和运行时多态。编译时多态-静态联编:静态多态,通过函数重载和运算符重载实现。运...原创 2019-10-08 17:22:16 · 128 阅读 · 0 评论 -
派生类
派生类继承了基类的全部数据成员和除了构造、析构函数之外的全部函数成员。public派生:不修改基类的访问控制属性,protected成员可以在派生类的类内部查看,在外部不可以通过函数对象查看,private属性不可查看。protected派生:将低级属性更新为protected,派生成员函数可以访问protected成员,但是其对象和派生类对象不可以访问protectedprivate属性不...原创 2019-10-08 13:49:12 · 365 阅读 · 0 评论 -
const有关(常函数、常成员),少量的static,引用&
const成员在内存中只存在一个副本,且其不是类和对象私有的,类的成员函数也只有一个副本。若成员数据是static类型,要在类外进行初始化,否则默认为0;auto变量的一般值是随机的,因为系统在分配内存时,只是将地址分配给变量,并没有内存中存在的数据进行初始化,所以是随机值。非静态成员非静态成员是通过对象来访问静态成员静态成员是通过类限定来访问Student::print();...原创 2019-10-06 19:33:55 · 245 阅读 · 0 评论 -
类中含有的四种默认函数
构造函数类内含有的构造函数,只是进行创建对象,不进行初始化。构造函数可以重载为多个,满足需求,但是不可以手动调用。构造函数没有返回值类型,函数名字与类的名字相同,在创建对象时,系统自动调用。构造函数又有初始化列表,在含有常量数据、类类型、引用的时候,必须使用初始化列表。析构函数没有返回值类型和参数,且只能有一个析构函数。默认的析构函数是进行浅拷贝,也就是地址拷贝,若类型的数据中含有指...原创 2019-10-05 14:15:44 · 411 阅读 · 0 评论 -
熄灯问题
题目描述```java#include #include #include #include using namespace std;int T;char oriLights[10];char LIghts[10];char result[10];int GetBit(char c,int i){return (c>>i)&1;}void SetB...原创 2019-09-24 10:34:53 · 233 阅读 · 0 评论 -
C++进阶:STL算法总结
头文件功能<algorithm>算法函数<numeric>数值算法<functinal>函数对象/仿函数分类填充函数作用fill(beg,end,val)将值val赋给[beg,end)范围内的所有元素fill_n(beg,n,val)将值val赋给[beg,beg+n)范围内的所有...原创 2019-09-14 17:45:02 · 197 阅读 · 0 评论 -
C++:STL
1.vector底层数据结构为数组,支持快速随机访问vector是一段连续的内存块查询性能好,并且再末端增加数据也很好,除非它重新申请内存适合高效的随机存储2.list底层数据结构为双向链表,支持快速增删底层是链表,所以它对插入、删除元素性能是最好的,但是查询性能非常差适合大量的插入和删除操作而不关心随机存储的要求3.deque底层数据结构为一个中央控制器和多个缓冲区,详见STL源码...原创 2019-09-02 20:54:46 · 323 阅读 · 0 评论 -
覆盖、多态、重载
覆盖override是重写了一个方法,以实现不同的功能。一般是用于子类在继承父类时,重写父类的方法。重写的规则:1.重写方法的参数列表必须完全与被重写的方法相同,否则不能称为重写而是重载。2.重写方法的访问修饰符一定要大于被重写方法的访问修饰符。3.重写的方法的返回值必须和被重写的方法返回一致。4.重写的方法所抛出的异常必须和被重写方法的所抛出的异常一致,或者是子类。5.被重写的方法...原创 2019-08-31 22:08:35 · 218 阅读 · 0 评论 -
C++静态库和动态库的区别
库分为两种:一种是静态库(.a和.lib) 和动态库(.so和.dll)。所谓静态,动态是指链接静态库其在链接阶段,会将生成的目标文件.o与引用到的库一起链接打包到可执行文件中,因此对应的链接方式是静态链接静态库特点总结:1.静态库对函数库的链接是放在编译时期完成的2.程序在运行时与函数库再无瓜葛,移植方便3.浪费空间和资源,因为所有相关的目标文件与牵扯到的函数库被链接合成一个可执...原创 2019-08-16 15:57:09 · 760 阅读 · 0 评论 -
C++:构造函数和析构函数调用顺序
设已经有A,B,C,D4个类的定义,程序中A,B,C,D析构函数调用顺序为?C c;void main(){ A*pa=new A(); B b; static D d; delete pa;}这道题主要考察的知识点是 :全局变量,静态局部变量,局部变量空间的堆分配和栈分配对于类A, 是建立在堆上的对象指针pa, 手动释放对于类B, 是建立在栈上的...原创 2019-08-01 13:18:12 · 466 阅读 · 0 评论 -
C++:类与对象
类的定义class 类名{ 成员变量名与成员函数的声明};类的后面一定要加;作用域运算符 ::访问限定符限定符作用private私有protected保护public公开 //只允许自己类内函数访问...原创 2019-07-31 22:55:22 · 146 阅读 · 0 评论 -
C++ :过渡
函数重载:函数名相同,只有函数参数不同#include <iostream>#include <cstdio>using namespace std;void printf(){ printf("hellom world\n");}int main(){ printf();}命名空间:避免全局变量,函数,类的命名冲突用法- 定义命名...原创 2019-07-23 22:12:01 · 71 阅读 · 0 评论 -
c++:第二课
C++三种for循环形式#include<iostream>#include<string>#include<vector>#include<algorithm>using namespace std;int main(){ string str="hello"; for(string::iterator i=str.begin()...原创 2019-05-27 21:57:50 · 161 阅读 · 0 评论 -
c++:第一课
c++头文件格式:#include<fstream> --------->文件头文件#include<algorithm>----------->算法头文件#include<iostream>using namespace std;class inta{ public://公开区,需要权限最小,都可以访问 int a; ...原创 2019-05-27 21:07:00 · 206 阅读 · 0 评论