
C++
文章平均质量分 65
丁金金_chihiro_修行
be better boy man
展开
-
2C++类和对象(二)
/类体:由成员变量和成员函数组成 };//注意后面的分号其中class为定义类的关键字,className为类的名字,{}中为类的主体,注意定义结束时加上后面的分号。类中的元素称为类的成员:类中的数据称为类的属性或者成员变量,类中的函数称为类的方法或者成员函数。1、声明和定义全部放在类体中。需要注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。2、声明放在头文件(.h)中,定义放在源文件(.cpp)中。注意:一般情况下,更期望采用第二种方式。原创 2024-10-05 23:22:53 · 5787 阅读 · 0 评论 -
1C++入门基础(一)
C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的程序,需要高度的抽象和建模时,C语言则不合适。为了解决软件危机,20世纪80年代,计算机界提出了OOP(object oriented programming:面向对象)思想,支持面向对象的程序设计语言应运而生。1982年,Bjarne Stroustrup博士在C语言的基础上引入并扩充了面向对象的概念,发明了一种新的程序语言。为了表达该语言与C语言的渊源关系,命名为C++。因此,C++是基于C语言而产生的,它既可以进行。原创 2024-10-05 23:16:44 · 5506 阅读 · 0 评论 -
指针的步长及意义(C语言基础)
代码演示:(不同编译器下偏移值可能不同)运行结果:总结:vs下常见指针的偏移值分别为:char *:1个字节int *:4个字节double *:8个字节数组指针:偏移整个数组大小结构体指针:偏移整个结构体大小代码演示:运行结果:总结:不同类型指针解引用时取出数据的字节数不同VS下常见指针类型解引用时取出的字节数分别为:char *:1个字节(通常需要强转)指针解引用时取出数据的字节数不同VS下常见指针类型解引用时取出的字节数分别为:char *:1个字节(通常需要强转)int *原创 2023-02-10 21:24:28 · 1813 阅读 · 0 评论 -
C++断言 static_assert, complie_assert, preComplie_assert
1. 断言(assertion)分类:运行时、预编译期、编译期,即断言的判断触发时机\2. 运行时断言使用assert宏来实现\3. 一旦定义了NDEBUG宏,那么assert宏将被展开成一条空语句不起作用,(可能会)被编译器优化掉,原意是在非Debug编译下不把运行时assert编进来\4. 预编译时期的断言可以使用预处理命令#ifdef或#ifundef配合#error实现,可以在预编译时期对一些宏进行检查以确定编译参数、头文件引用状态等。原创 2023-01-29 16:26:10 · 4670 阅读 · 0 评论 -
C++时间库chrono_Time_point (三)
所有这些timer都不会保证绝对精准。即经常用来得到当前时间点到1970年1月1日00:00的时间距离、该函数返回的duration的精度和构造time_point的时钟(Clock)有关(见4时钟详解)。std::chrono::time_point 表示一个具体时间,如上个世纪80年代、今天下午3点、火车出发时间等,只要它能用计算机时钟表示。时间点有个重要的函数:duration time_since_epoch() (用于获取当前时间点距离时间戳的时间长度)要求其_Clock模板参数必须满足。原创 2023-01-17 20:59:24 · 3501 阅读 · 0 评论 -
C++时间库chrono_CLOCK(二)
*strady_clock:**它保证绝不会被调用,因此当实际时间流逝,其timepoint值绝不会减少,而且这些timepoint相对于真实时间都有稳定的前进速率。(2)由于各种time_point表示方式不同,chrono也提供了相应的转换函数 time_point_cast。,稳定的、单调的时钟,不受系统时间调节的影响,因而适合于测量时间间隔,通常测量程序运行时间就用。,系统范围的挂钟,可以理解为桌面右下角的时钟,这个时钟是可以调节的,因此。等类型,为了得到以我们想要的单位表示的时间段,可以用。原创 2023-01-17 20:58:28 · 1223 阅读 · 0 评论 -
C++时间库chrono_duration(一)
chrono是一个基于模板的,面向对象的,设计优雅且功能强大的。chronoduration:一个duration就代表了一个时间段,比如2分钟,4小时等等。clockclock的作用就相当于我们日常使用的手表:显示时间。chrono内部定义了三种clock和。time pointtime point表示某个特定的时间点。template原创 2023-01-17 16:13:21 · 3266 阅读 · 0 评论 -
chrono_duration(一)
chrono简介chrono是一个基于模板的,面向对象的,设计优雅且功能强大的time library。chrono内部定义了三种和时间相关的类型:duration:一个duration就代表了一个时间段,比如2分钟,4小时等等。clock: clock的作用就相当于我们日常使用的手表:显示时间。chrono内部定义了三种clock:system clock、steady clock和high-resolution-clock。time point:time point表示某个特定的时间点。原创 2023-01-16 22:36:08 · 1300 阅读 · 0 评论 -
MSVC C++ STL 源码解析系列
是 c++ 11 添加的智能指针之一,是裸指针的封装,我们可以直接使用裸指针来构造int a;int b;int b;1 });1 , 2 });intint a;int b;int b;1 });1 , 2 });int a;int b;int b;1 });1 , 2 });int a;int b;int b;原创 2023-01-10 00:30:14 · 1324 阅读 · 0 评论 -
智能指针(四) unique_ptr
从上面的源码中,可以看出,release()并不释放内存,仅仅只是将std::unique_ptr中的数据指针置空并抛出数据指针;虽然unique ptr智能指针不能拷贝,但是,当这个unique_ptr将要被销毁,是可以拷贝的。release()并不释放内存,仅仅只是将std::unique_ptr中的数据指针置空并抛出数据指针;也可以用来初始化另外一个智能指针(shared_ptr的get则不可以),unique_ptr的初始化(和shared_ptr的初始化相同)unique_ptr不支持的操作。原创 2023-01-10 00:25:44 · 522 阅读 · 0 评论 -
智能指针(三) weak_ptr
它没有重载 * 和 -> 运算符,而且weak_ptr 指向的对象可能会释放(不受weak_ptr控制,我们不能操作一个已经释放的对象),因此不可以直接通过 weak_ptr 访问对象(), 典型的用法是通过 lock() 成员函数来获得 shared_ptr,进而使用对象。Iock()功能就是查看weak _ptr所指向的对象是否存在,如果存在,那么这个1ock他就返回一个指向该对象的shared_ptr,(这也会导致原来的shared_ptr指向对象的引用计数加一);原创 2023-01-09 23:56:47 · 618 阅读 · 0 评论 -
智能指针(二) shared_ptr 注意点
然后调用函数set_ptr后又增加了m_ptr_a 指向 new CA() 和 m_ptr_b指向 new CB 两条引用,当test_refer_to_each_other这个函数返回时,对象ptr_a和ptr_b被销毁,通过结果可以看到,最后CA和CB的对象并没有被析构,其中的引用效果如下图所示,起初定义完ptr_a和ptr_b时,只有 ptr_a 指向new_CA() 和ptr_b 指向 new CB()两条引用,注意 :get() 返回的裸指针不能delete,否则会异常。原创 2023-01-09 23:06:11 · 773 阅读 · 0 评论 -
()智能指针一) shared_ptr
默认删除器处理不了(用shared ptri管理动态数组),需要我们提供自己指定的删刚除器:});可用default_delete来做删除器,default_.delete是标准库里的模板类。int//用来释放malloc出来的函数对象 template < class T > class FreeFunc {public :free(ptr);} };//用来释放new[]出来的函数对象 template < class T > class DeleteArrayFunc {原创 2023-01-09 22:27:05 · 1117 阅读 · 0 评论 -
shared_ptr 和 unique_ptr 深入探秘(CPP)
unique_ptr只保存了类型指针 ptr 和这个指针的析构方法,调用 delete ptr,就需要ptr的完整类型,为了防止这个问题出现,直接通过 assert sizeof 排除掉了这种风险。unique_ptr相当于在编译时绑定了删除器。shared_ptr保存的是一个控制块的指针。控制块包含的就是一个引用计数和一个原来对象的裸指针。控制块中初始化的指针是nullptr,在运行时为其赋值,也可以通过reset修改。类似于虚函数,shared_ptr相当于在运行时绑定了删除器。原创 2023-01-09 16:51:39 · 837 阅读 · 0 评论 -
仿函数C++
仿函数(Functor)又称为函数对象(Function Object)是一个能行使函数功能的类。仿函数的语法几乎和我们普通的函数调用一样,不过作为仿函数的类,都必须重载 operator() 运算符。因为调用仿函数,实际上就是通过类对象调用重载后的 operator() 运算符。//用来释放malloc出来的函数对象public:free(ptr);//用来释放new[]出来的函数对象public://用来释放new 出来的函数对象public:delete ptr;原创 2023-01-06 11:11:07 · 1004 阅读 · 4 评论 -
函数模板-C11/17/14
定义函数模板使用函数模板两阶段翻译 Two-Phase Translation模板的编译和链接问题多模板参数引入额外模板参数作为返回值类型让编译器自己找出返回值类型默认模板参数重载函数模板重载时最好不要随便改变模板参数个数,最好可以显示的指定模板参数类型确保所有被重载的函数模板在使用时已经被声明定义定义函数模板原创 2022-12-27 10:58:23 · 865 阅读 · 0 评论 -
CPP构造函数总章
载,而⾮静态成员是随着对象的⽣成而⽣成。所以静态成员或⽅法的加载时机要早于⾮静态成员⽅法或。载,而⾮静态成员是随着对象的⽣成而⽣成。所以静态成员或⽅法的加载时机要早于⾮静态成员⽅法或。静态⽅法只能访问静态的成员变量和静态的成员⽅法。静态⽅法只能访问静态的成员变量和静态的成员⽅法。输出结果也会多出 调用有参数构造。而静态内部类可以看作是⼀个静态成员,所以道理同上。⽤静态成员,不能调⽤⾮静态成员。原创 2022-11-27 23:38:05 · 877 阅读 · 0 评论 -
类型转换构造函数
我们通过 类型转换构造函数 和 类型转换运算符 来做到 类型转换。构造函数:移动构造函数,拷贝构造函数,默认构造函数、普通构造函数特点:1、以类名作为函数名2、没有返回值;原创 2022-11-27 23:28:23 · 1192 阅读 · 0 评论 -
C++ 类:类相关的非成员函数、构造函数; =delete ; =defalute;
Sales_data.hSales_data.cppMain.cppCmakeLists从上代码可知,add, print, read 不属于类本身,从概念上讲 属于类接口的组成部分。同样,通常把非成员函数的声明和定义分开。函数从概念是属于类,虽然不定义在类型中,也同样与类声明在同一个头文件中一般来说,如果非成员函数是类接口的组成部分,则这些函数的声明应该与类放在同一个头文件中=delete禁止某类函数的调用假如上面的几个函数中,不想使用其中某个,可以将其定义为private,或者使用=delete原创 2022-11-27 23:26:42 · 382 阅读 · 0 评论 -
c风格字符串,数组,string ,vector
vector(string>mystr:/伧创建一个string类型的空的vectorj对象(容器),目前这个mystr里不包含任何元素;原创 2022-11-20 11:56:07 · 952 阅读 · 0 评论 -
迭代器C11
在操作迭代器的过程中(使用了迭代器这种循环体),千万不要改变vectori容器的容量,也就是不要增加或者删除vectori容器中的元素/往容器中增加或者从容器中删除元素,这些操作可能会使指向容器元素的指针、引用、迭代器失效。失效就表示不能再代表任何容器中的元素。一旦使用失效的东西,就等于犯了严重的程序错误,很多情况下,程序会直接崩溃。原迭代器指的是进行操作之前保存的迭代器,包括begin()、end()以及其他位置的迭代器。原创 2022-11-19 23:39:15 · 492 阅读 · 0 评论 -
类型转换C11
因为类中存在虚函数,说明它可能有子类,这样才有类型转换的情况发生,由于运行时类型检查需要运行时类型信息,而这个信息存储在类的虚函数表中,只有定义了虚函数的类才有虚函数表。cast-name有static_cast,dynamic_cast,const_cast和reinterpret_cast四种,表示转换的方式。在转换可能发生的前提下,dynamic_cast会尝试转换,若指针转换失败,则返回空指针,若引用转换失败,则抛出异常。非常激进的指针类型转换,在编译期完成,可以转换任何类型的指针,所以极不安全。原创 2022-11-19 23:38:56 · 527 阅读 · 0 评论 -
类型别名c11
使用typedef使用 usingwages base 是 double 类型 bbase 是 double *原创 2022-11-19 23:38:01 · 120 阅读 · 0 评论 -
函数总章C11
前面放auto,表示还数返回类型放到参数列表之后,而放在参数列表之后的返回类型是通过->开始的。原创 2022-11-19 23:37:14 · 507 阅读 · 0 评论 -
const 和 constexpr
3) 函数在使用之前,必须有对应的定义语句。我们知道,函数的使用分为“声明”和“定义”两部分,普通的函数调用只需要提前写好该函数的声明部分即可(函数的定义部分可以放在调用位置之后甚至其它文件中),但常量表达式函数在使用前,必须要有该函数的定义。//普通函数的声明//常量表达式函数的声明//常量表达式函数的定义}int main(){ //调用常量表达式函数//调用普通函数return 0;}//普通函数的定义}36。原创 2022-11-19 23:35:44 · 609 阅读 · 0 评论 -
auto decltype
auto 和 decltype。原创 2022-11-19 23:34:57 · 132 阅读 · 0 评论 -
Neovim 配置实战:从0到1打造自己的IDE]
本节是第一篇,我们要先介绍一下如何在 Windows 命令行环境下安装 Neovim,然后会对配置文件结构做一个总体的规划。在安装 Neovim 之前,首先要确保你的电脑上有 WSL 2 环境,WSL 是 Windows Subsystem for Linux 的缩写,简单来讲就是在 Windows 上运行的 Linux 子系统。WSL 2 就是 WSL 的 2.0 版本。WSL 2 的安装方法在这里就不展开说了,如有需要请参考官方指南或其他教程。我们假设您的系统已经成功安装 WSL 2,如果不确定是否安装原创 2022-10-05 21:49:43 · 6946 阅读 · 8 评论 -
学习路线C++
C++ 编程语言的历史可以追溯到 1979 年,当时 Bjarne Stroustrup 为博士学位论文进行了一些开发。在 Stroustrup 可以使用的所有语言中,有一种被称为 Simula 的语言,顾名思义,它可能是一种主要为仿真而设计的语言。Simula 67 语言是 Stroustrup 使用的变体,被认为是支持面向对象编程范例的主要语言。Stroustrup 发现这种范例对包装开发很有帮助。但是,Simula 语言对于实践和实际使用而言太慢了。随后不久,Bjarne Stroustrup 希望原创 2022-08-27 12:34:36 · 548 阅读 · 0 评论 -
深入理解C++11
编译器的目标系统环境中是否包含完整的C库STDC:编译器对于标准C库的实现是否和C标准一致(是否定义、如何定义由编译器决定):编译器支持的C标准的版本(是否定义、如何定义由编译器决定):yyyymmL格式的整数常量,表示C++编译环境符合某个版本的ISO/IEC 10646标准func函数中可以使用__func__标识符函数名称,编译器会在函数定义开始时隐式地插入__func__标识符定义:func= “”;VA_ARGS。...原创 2022-08-27 12:33:45 · 923 阅读 · 0 评论 -
总结归纳:C++17新特性
std::variant是类型安全的联合体,是一个加强版的 union,variant支持更加复杂的数据类型,例如map,string等等。lambda也是c++11中引入的,在C++11中,lambda表达式只能用捕获this,this是当前对象的一个只读的引用。需要注意的是,string_view 由于没有原始字符串的所有权,使用string_view 一定要注意原始字符串的生命周期。在C++17中,可以捕获this, this是当前对象的一个拷贝,捕获当前对象的拷贝,能够确保当前对象释放后,...原创 2022-08-25 20:22:20 · 3366 阅读 · 0 评论 -
学习笔记:C++ 11新特性
和std::bind在平时编程过程中封装函数更加的方便,而lambda表达式将这种方便发挥到了极致,可以在需要的时间就地定义匿名函数,不再需要定义类或者函数等,在自定义STL规则时候也非常方便,让代码更简洁,更灵活,提高开发效率。• std::thread使线程的创建变得非常简单,还可以获取线程id等信息。• std::mutex通过多种方式保证了线程安全,互斥量可以独占,也可以重入,还可以设置互斥量的超时时间,避免一直阻塞等锁。...原创 2022-08-25 20:21:42 · 412 阅读 · 0 评论 -
C++学习笔记
指针变量定义语法:数据类型 * 变量名;//1、指针的定义 int a = 10;//定义整型变量a //指针定义语法: 数据类型 * 变量名;int * p;//指针变量赋值 p = & a;//指针指向变量a的地址 cout原创 2022-08-25 20:21:10 · 783 阅读 · 0 评论 -
C++基础入门
所谓数组,就是一个集合,里面存放了相同类型的数据元素**特点1:**数组中的每个数据元素都是相同的数据类型**特点2:**数组是由连续的内存位置组成的[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6OOSAsu0-1661430016529)(assets/1541748375356.png)]数据类型 数组名[ 数组长度 ];数据类型 数组名[ 数组长度 ] = { 值1,值2 ...};数据类型 数组名[ ] = { 值1,值2 ...};示例//定义方式1。...原创 2022-08-25 20:20:39 · 197 阅读 · 0 评论 -
C++核心编程
*作用:**函数名可以相同,提高复用性同一个作用域下函数名称相同函数参数类型不同或者个数不同或者顺序不同函数的返回值不可以作为函数重载的条件//函数重载需要函数都在同一个作用域下{cout ...原创 2022-08-25 20:20:05 · 208 阅读 · 0 评论 -
C++14新特性的所有知识点全在这儿啦!
C++14通过std::shared_timed_mutex和std::shared_lock来实现读写锁,保证多个线程可以同时读,但是写线程必须独立运行,写操作不可以同时和读操作一起进行。C++14中增加了deprecated标记,修饰类、变、函数等,当程序中使用到了被其修饰的代码时,编译时被产生警告,用户提示开发者该标记修饰的内容将来可能会被丢弃,尽量不要使用。我们都知道C++11中有std::make_shared,却没有std::make_unique,在C++14已经改善。...转载 2022-08-25 20:19:34 · 406 阅读 · 0 评论 -
C++11常用新特性(二)
类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。std::function对象是对C++中现有的可调用实体的一种类型安全的包裹(我们知道像函数指针这类可调用实体,是类型不安全的)。...原创 2022-08-25 20:18:59 · 313 阅读 · 0 评论 -
C++11常用新特性(一)
最近工作中,遇到一些问题,使用C11实现起来会更加方便,而线上的生产环境还不支持C11,于是决定新年开工后,在组内把C++11推广开来,整理以下文档,方便自己查阅,也方便同事快速上手。(对于异步编程十分实用的Future/Promise以及智能指针等,将不做整理介绍,组内使用的框架已经支持并广泛使用了,用的是自己公司参考boost实现的版本)...原创 2022-08-25 20:18:30 · 281 阅读 · 0 评论 -
C++ 20语言特性
span是容器的一个视图(即非所有者视图),它提供了对连续元素组的边界检查访问。由于视图不拥有它们自己的元素,它们的构造和复制成本很低——考虑视图的一种简单方法是它们持有对其数据的引用。这个关键字接受一个表达式,如果您正在等待的东西(在本例中是读或写)没有准备好,则挂起执行,否则继续执行。该特性简化了常见的代码模式,有助于保持范围紧凑,并为常见的生存期问题提供了优雅的解决方案。接受给定的表达式,生成(即返回)它的值,并在那一点暂停协程。时都保持它的状态(在本例中,调用是针对for循环中的每次迭代)。...原创 2022-08-25 20:18:02 · 956 阅读 · 0 评论 -
「Notes」C++14新特性浅谈
原文链接:https://liuxizai.ac.cn/post/notes-cpp14/基于 Ubuntu 20.04 的 NOI 2.0 发布后,我们或许有机会开始使用 C++14。这篇 Blog 将对 OI 中可能会使用到的 C++14 的新特性进行简要总结。由于大部分 OIer 被 CCF 迫害可能是 C++98 转 C++14,文中部分特性实际上是来源于 C++11 标准的。...原创 2022-08-25 20:17:04 · 784 阅读 · 0 评论 -
vim 安装 CC++ 自动补全
目的是在两个用户配置不同的vim , 一个用户 只有linux C 的补全,另一个用户有 C/C++ 的补全。原创 2022-08-16 21:56:47 · 2418 阅读 · 0 评论