c++
秃头少女!
这个作者很懒,什么都没留下…
展开
-
cmakelist
PROJECT(deploy)# PROJECT(SendAlarm)cmake_minimum_required(VERSION 3.0)set(CMAKE_CXX_STANDARD 17)find_package(CUDA)find_package(OpenCV REQUIRED)find_package(Boost REQUIRED filesystem thread regex)find_package(jsoncpp REQUIRED)set(ARCH ${CMAKE_SY原创 2021-12-21 10:57:57 · 65 阅读 · 0 评论 -
读取.yaml文件和json文件
yaml文件: auto label_cls = YAML::LoadFile("label.yaml"); std::vector<std::string> m_label_cls; if (label_cls["label"]) { m_label_cls = label_cls["label"].as<std::vector<std::string>>(); } 取为.yaml数据时类型: .as<boo原创 2021-12-15 15:58:43 · 620 阅读 · 0 评论 -
对于锁的认识
1.锁建议在保护资源时使用。2.控制线程异步之类的逻辑时,不建议使用锁,有可能导致死锁的情况。建议设计思路时考虑到同步异步的情况3.嵌套锁慎用,易发生死锁原创 2021-12-15 15:23:44 · 338 阅读 · 0 评论 -
对类内静态函数的理解
1.不用生成对象就可以直接调用2.不能操作类内成员变量(没有this指针)3.类内静态函数作用域在类内,普通静态函数作用域在本文件4.智能指针可以指向类,然后访问类内静态函数;也可直接类名::静态函数名5.静态成员(类内类外)生命周期在整个进程,main函数初始化内存,程序结束销毁...原创 2021-12-15 15:20:46 · 405 阅读 · 0 评论 -
类内const成员变量只能在初始化列表里赋值(有效赋值)
类内成员变量(有效)赋值两种:1.初始化列表赋值2.设置成静态的,在类外赋值原本想的在构造函数中给const类成员赋值,编译错误。思考大体原因:1.构造函数在某种意义上还是可以理解为类已经生成好了,编辑器内部仅调用一次,此时const如果赋值,违背了const常量的语法意义2.初始化列表可以,个人理解为初始化列表的执行顺序在构造函数之前,相当于类还未完全生成好。(总觉得像历史遗留原因,二胎???)3.类内定义时如果给const成员变量赋值,会导致每个对象的此const成员变量均为给定的值。原创 2021-12-15 14:29:49 · 1173 阅读 · 0 评论 -
智能指针定义
shared_ptr的定义std::shared_ptr<数据类型> ptr = std::make_shared<数据类型>();智能指针类型的数组定义原创 2021-12-15 11:47:38 · 467 阅读 · 0 评论 -
缓冲区c++实现
链表缓冲区实现原创 2021-12-15 11:22:18 · 1052 阅读 · 3 评论 -
STL
1.容器类:1.顺序容器vector list deque2.关联容器set mult+set map mult+map3.容器适配器stack queue priority_queuevector 数组(随机访问迭代器)1.简单操作push_back insertpop_back erase2.底层实现数组(动态开辟)3.扩容方式以倍数的形式开辟更大的内存,旧的数据拷贝...原创 2020-07-30 18:29:42 · 108 阅读 · 0 评论 -
实模式和保护模式 虚拟地址空间布局
实模式:物理地址:A的恶意程序 指针+偏移 修改其他程序的指令或者数据,恶意篡改其他程序的目的保护模式:80386 x86体系虚拟地址:地址+偏移 在虚拟地址空间内3.虚拟地址空间的布局...原创 2020-07-30 16:04:03 · 152 阅读 · 0 评论 -
C/C+的区别之函数重载
两个数相加的泛型:C:#define Sum(a,b)(a+b)int main(){int a=10;int b=20;int rt=Sum(a,b);double rt2=Sum(10.1,10.2);}宏函数-->预编译-->替换-->没有类型检查和安全检查 不安全void* Sum(void* a,int alen,void*b,int blen);void*泛型[) 半开半闭区间void* 容易越界 (...原创 2020-07-30 15:24:44 · 134 阅读 · 0 评论 -
内联inline函数和引用
inline函数:函数调用点代码直接展开(文本替换) 没了开栈和清栈的开销,效率高inline int Sum(int a,int b){return a+b;}1.inline 函数和普通函数的区别:inline函数只能在本文件可见2.inline函数和static修饰的函数的区别:有调用函数的开销static会在符号表里把global符号-->local函数3.inline函数和宏的区别:inline 编译 安全检查机制,类型检查宏 预编译 无安全...原创 2020-07-30 15:00:21 · 487 阅读 · 0 评论 -
new和malloc,const
1.new 关键字 malloc 函数2.new 系统计算大小 malloc人为计算所开辟的大小3.new 返回值类型安全 malloc 返回值类型不安全4.new 开辟内存还可以初始化 malloc 单纯的开辟内存5.new[] 数组元素个数 malloc 传递数组整体大小6.new 自由存储区 malloc 堆区7.内存申请失败的时候,new抛出异常 malloc 会返回NULL空指针8.new可以重载 malloc 不能重载new:(1)o...原创 2020-07-30 14:39:52 · 170 阅读 · 0 评论 -
模板
模板:C++的泛型机制,通用性,为了摆脱对类型的依赖模板:函数模板 类模板1.函数模板--》模板作函数用template<typename T>//函数模板T Sum(T a,T b){return a+b;}调用点:Sum<int>(10,20);2.模板函数int Sum(int a,int b){return a+b;}3.模板实例化(1)定义点:只编译模板的头部-->告诉编译器有这样一个模板存在 (2)调.原创 2020-07-30 14:10:30 · 86 阅读 · 0 评论 -
c++封装,六大函数和static
C和C++1.C+调用C语言:extern "C"{包含在里面的代码以C语言规则来进行处理。}2.C++ 面向对象的语言1.类和对象:(1)oop思想 (2)封装特性 (3)this(this call)oop思想:模拟现实:对象:空间+资源成员变量 (独享)成员方法(共享)2.封装:隐藏了对象的属性和实现细节,对外提供公有接口,供函数使用。【getname()接口】访问限定符:public: 任意protected:本类和子类...原创 2020-07-29 19:42:25 · 522 阅读 · 0 评论 -
C++三大特征:封装,继承,多态
继承的本质:代码复用1.继承和派生的关系:2.继承了什么?1.普通的成员变量2.普通的成员方法3.静态的成员变量4.静态的成员方法除构造和析构以外的所有成员方法3.派生类的内存布局:基类的布局优先于派生类4.派生类的构造函数析构顺序:先构造的后析构1.基类的构造函数2.派生类的构造函数3.派生类的析构函数4.基类的析构函数5.继承方式:访问限定符:pulic:任意protected:本类和子类private:本类基类下不同.原创 2020-07-29 17:55:18 · 161 阅读 · 0 评论 -
C++拷贝
浅拷贝:简单的赋值 共享机制 节省空间,开销小深拷贝:每个对象拥有自己独立的资源 资源占用太大,内存使用率太低写时拷贝:该内存的释放:最后一个对象销毁时,判断是最后一个内存的方法是设立一个计数器count-->该堆内存有多少个对象指向。1.写之前:浅拷贝2.写时:深拷贝 str2进行修改的时候,计数器先减为1str1[0]='a';operator[]1.判断count>1,深拷贝2.count==1,直接修改...原创 2020-07-29 15:47:29 · 111 阅读 · 0 评论 -
运算符重载,迭代器和内存自主管理机制(内存池)
1.基础运算符的重载机制不能重载的运算符:. :: ?: sizeof运算符重载规则:1.不能改变运算符的优先级和结合性2.不能改变运算符的用法3.不能创造新的运算符4.不允许有函数默认值2.迭代器int main(){std::string str1("hello");std::string::iterator it =str1.begin();while(it!=str1.end()){std::cout<<*it;it...原创 2020-07-29 14:35:22 · 119 阅读 · 0 评论