自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(106)
  • 资源 (2)
  • 收藏
  • 关注

原创 std::thread 的构造-源码解析

需要注意,libstdc++ 和 libc++ 可能不同,就比如它们 64位环境下的结果就是8,它们的实现只保有一个线程 ID。我们这里的源码解析涉及到的 C++ 技术很多,我们也没办法每一个都单独讲,那会显得文章很冗长,而且也不是重点。相信你也感受到了,不会模板,你阅读标准库源码,是无稽之谈,市面上很多教程教学,教导一些实现容器,过度简化了,真要去出错了去看标准库的代码,那是不现实的。现代C++模板教程。_Thr_Thrd_t_Startdecay_t_Invoke现代C++模板教程。

2024-03-12 11:35:39 1063 1

原创 模板元编程计算1-n的和

【代码】模板元编程计算1-n的和。

2022-12-08 17:01:41 330 1

原创 现代C++20遍历tuple能有多优美?

得益于std::index_sequence,折叠表达式,和C++20的带模板形参lambda,我们可以用仅仅这么点代码就遍历完成。如果想做除了打印的别的事情,可以写一个传函数的版本,如下。

2022-11-29 19:56:01 836

原创 C++获取虚指针手动调用虚函数

vs2022下成功运行,你可能会觉得很怪异,居然要用三级指针,我甚至去测了一下,vs2017是一级,vs2019是二级,好了,大家知道个这么事情就好。

2022-11-14 19:46:27 529 1

原创 C函数定义

{a : b;}C89max(a , b) // a 和 b 拥有 int 类型,返回类型为 int {a : b;}C89 中,说明符与限定符是可选的,若省略它,则函数返回类型默认为 int (可由声明符修改)。另外,旧式定义不要求在声明列表中声明每个参数。任何缺少声明的参数拥有 int 类型但是也可以使用正常的我们现在使用的风格a : b;}C23不同于函数声明,不允许无名形参(否则旧式 (K&R) 函数定义中会有冲突),即使不在函数中使用也必须命名它们。

2022-11-12 23:45:51 247

原创 C++单例模式

单例模式指在整个系统生命周期里,保证一个类只能产生一个实例,确保该类的唯一性。

2022-11-11 23:14:24 150

原创 C++在main函数之前执行初始化函数

【代码】C++在main函数之前执行初始化函数。

2022-11-11 20:52:12 547

原创 printf是用户调用还是系统调用?

首先 printf显然不是系统调用,printf用户调用,然后执行封装例程中的int 0x80指令,到此都是,然后再进入内核。

2022-11-11 20:47:54 794

原创 C++11alignas 说明符和alignof 运算符和内存对齐问题

alignas()alignas()alignas(...)1) 表达式 必须是求值为零或合法的或扩展对齐的。2) 等价于 alignas(alignof(类型标识))3) 等价于对同一说明应用多个 alignas 说明符,逐个对应于的各个成员,形参包可以是类型或非类型形参包。

2022-11-09 20:54:30 1235

原创 C++20管道运算符

管道运算符调用的函数并不会改变原来的序列,这一点需要注意。虽然管道运算符相比传统的函数式看着要更加抽象,但是其实如果你真正的去使用了解,倒也是挺优雅的概念库 (C++20) - cppreference.com范围库 (C++20) - cppreference.com。

2022-11-09 10:35:13 2687

原创 C++使用boost.serialization序列化与反序列化

侵入式序列化,非侵入式序列化虽然看着有些长,但是请各位要注意,这是两个例子,分别介绍基本的普通类序列化与子类序列化,并反序列化反序列化的代码其实都一样(只是把对象A改成了B)修改了构造函数传参。特别关注templatevoid serialize(Archive& ar, const unsigned int version)我们在后面都会用到序列化STL容器

2022-11-07 13:34:52 1269

原创 C++成员指针

相信如果学习过模板的开发者们都觉得这样全部写明实在太不优雅了,我们一般写自然也不会写成这样的,使用模板会方便的多,但是为了新鲜的开发者们学习难度,我们使用的最简单直接的方式,全部写明参数来介绍。如果有兴趣的话可以看看本人前面说的bind的实现,是如何不写明类型接收参数的。如果还有疑问,可以阅读cppref成员访问运算符 - cppreference.comC++实现std::bind_归故里@的博客-CSDN博客【代码】C++实现std::bind。

2022-11-06 10:42:12 728

原创 C++实现std::bind

【代码】C++实现std::bind。我们用最简单的方式完成它的功能,即requires和lambda,只需要三个函数重载即可

2022-11-05 21:22:56 413

原创 C++实现max,min,sum,bind

【代码】C++实现max,min,sum,bind。这些实现非常简单,甚至不能说实现,只是“包装”,“套壳”,但是总而言之能不自己写就不要自己写。在visual studio2022下编译通过,还使用了三方库fmt,链接如下:首先你需要学习过模板,再学习过形参包,constexpr,lambda,可变参数,折叠表达式,完美转发,右值引用,约束与概念,然后就可以了,非常的简单记得打开编译器的c++20选项单元测试如下:

2022-11-04 21:57:26 234

原创 C++new表达式

如果提供了 布置参数,那么它们会作为额外实参传递给分配函数。这些分配函数被称作“布置 new”,这来源于标准分配函数 void*, void*),它直接返回未更改的第二实参。它被用于在已分配的存储中构造对象。我们一般提起new一般默认是想说申请动态内存的,那么new做了什么事情?operator new[]是同理,不再强调。第三和第三种其实也没什么区别,类型加了个括号。1和2都是动态申请内存的,并没有多大区别。

2022-11-02 08:43:15 170

原创 C#和Python使用C++编译的dll

因为是显示链接,所以只需要获得生成的dll即可因为C#无法直接调用C++的dll,所以我们使用了使用vs自带的工具查看dll导出符号名称确保导出符号名是正确的(和函数名称一致)再进行下一步操作。

2022-10-31 09:51:58 464

原创 C++使用WindowsAPI显式链接dll

假设你已经准备好了一个dll,且没有使用.def文件修改导出的函数符号名的话。首先各位需要准备好一个编译好的dll,不需要有.h文件或.lib。代码非常的简单,如果有任何的疑问都可查阅微软文档。那么现在,我们就可以编写代码了。显式链接只需要dll即可。我们就需要使用vs的工具。

2022-10-30 22:22:46 390

原创 OpenCV C++录制视频录制与播放

/打开视频文件cv::VideoCapture capture("./video/蕾姆海边.mp4");//isOpen判断视频是否打开成功if (!return -1;}//获取视频帧频std::cout

2022-10-30 14:11:34 2744

原创 C++17结构化绑定

结构化绑定声明 (C++17 起) - cppreference.com。比如上面这段代码的打印结果就是。

2022-10-29 19:06:22 344 1

原创 非同步阻塞,同步阻塞,异步阻塞,异步非阻塞 都是什么?

"是发起了一个调用后, 没有得到结果之前不返回, 那它毫无疑问就是被**“阻塞”**了(即调用进程处于 “waiting” 状态)。异步则是相反,调用在发出之后,这个调用就直接返回了,所以没有返回结果(结果会在不久的将来获得)"调用发出了以后就直接返回了, 毫无疑问, 这个进程没有被**“阻塞”**。所谓同步,就是在发出一个调用时,在没有得到结果之前, 该调用就不返回。异步与否,取决于你的函数调用返回之后 OS 有没有在后台给你做事情。阻塞与否,取决于在非就绪状态时调用是否返回。

2022-10-29 18:54:46 272

原创 C#简易计算器

17的Button按钮和一个文本框,以及三个为了计算的成员变量。

2022-10-26 18:26:37 97

原创 使用WindowsAPI读写文件

该函数返回一个句柄,该句柄可用于访问不同类型的 I/O 的文件或设备,具体取决于文件或设备以及指定的标志和属性。否则,可能会造成数据损坏或系统不稳定,因为应用程序的写入可能会与其他来自文件系统的更改冲突,并使卷的内容处于不一致状态。文件或 I/O 设备的句柄 (例如文件、文件流、物理磁盘、卷、控制台缓冲区、磁带驱动器、套接字、通信资源、mailslot 或管道)。结构的指针,该结构包含两个独立但相关的数据成员:可选的安全描述符,以及一个布尔值,该值确定返回的句柄是否可以由子进程继承。

2022-10-26 09:56:36 1328

原创 C++17string_view的使用介绍与实现

值得一提的是标准并没有规定basic_string_view有对应的构造函数,按照MSVC的实现来说,是basic_string内部实现了一个转换函数可转换到basic_string_view。(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20 中移除)(C++20)描述一个能指代常量连续仿 char 对象序列的对象,序列首元素在零位置。即使在 C++23 中引入的正式要求前,所有既存实现中。的迭代器类型上的所有要求亦应用于。是到常字符序列中的视图。

2022-10-25 08:37:39 1470

原创 C++函数指针接lambda原理

我们不详细讲述lambda的基本知识我们都使用过lambda,一般来说 ,我们都是这样的语句去创建一个lambda,这样的lambda,auto推导的是匿名lambda类的类型,也就是实例化了一个lambda类的对象如果不进行捕获,则lambda匿名类实则为空类,如果进行sizeof x的结果会为1,这些都没什么好说的当我们使用x()的时候也就是调用这个函数对象的operator()这些都不是我们今天要讲述的重点,我们想要用函数指针来接lambda表达式,那又会如何呢?

2022-10-20 10:01:48 799

转载 C++如同规则

由于编译器(通常)不能分析一个外部库的代码,以确定它是否执行 I/O 或者 volatile 访问,因此第三方库的调用同样不受这种优化的影响。是“如同”规则的一项例外:编译器可以删除对移动和复制构造函数的调用以及关联的临时对象的析构函数的调用,纵使这些调用具有可观察的副作用也是如此。2) 程序终止时,写入文件的数据完全如同程序是按照所写的代码那样执行的一般。的调用,即使提供了一个用户定义的替代函数并且具有可观察的副作用也是如此。对象的值是稳定的(之前的求值已经完成,新的求值没有开始)

2022-10-18 10:06:01 58

原创 C++待决名

在模板(类模板和函数模板)定义中,某些构造的含义可以在不同的实例化间有所不同。特别是,类型和表达式可能会取决于类型模板形参的类型和非类型模板形参的值。对待决名和非待决名的名字查找和绑定有所不同。非待决名在模板定义点查找并绑定。即使在模板实例化点有更好的匹配,也保持此绑定:如果非待决名的含义在定义点和模板特化的实例化点间有所改变,那么程序非良构,不要求诊断。在下列情形可能会出现这种情况:ADL查找规则等我们不再介绍下列类型是待决类型:下列表达式是类型待决的:在模板(包括别名模版)的声明或定义中,不

2022-10-16 15:11:04 571

原创 C++操作Excel表格

【代码】C++操作Excel表格。

2022-10-10 21:36:42 4208 1

原创 C++容易迭代器失效

只读方法决不会使迭代器或引用失效。指代任何添加一或多个元素到容器的方法,而。指代任何从容器移除一或多个元素的方法。

2022-10-10 19:31:55 177

原创 C++对象存储期

这类对象的存储在线程开始时分配,并在线程结束时解分配。每个线程拥有它自身的对象实例。关于具有此存储期的对象的初始化的细节,见非局部变量和静态局部变量。这类对象的存储在程序开始时分配,并在程序结束时解分配。所有在命名空间(包含全局命名空间)作用域声明的对象,加上声明带有 static 或 extern 的对象均拥有此存储期。有关拥有此存储期的对象的初始化的细节,见非局部变量与静态局部变量。这类对象的存储在外围代码块开始时分配,并在结束时解分配。关于具有此存储期的对象的初始化的细节,见 new 表达式。

2022-10-09 14:05:59 260

原创 变量与对象

在程序设计语言的学习、程序设计语言理论乃至一般的软件开发领域中,充斥着许多指鹿为马、以讹传讹的现象。虽然这并非这些领域的特色,但存在一些理由使之特别显著,而应当引起重视。这类混淆普遍而基本。这特别体现在的问题上。这通常不是有意的;但毫无疑问,这和涉众普遍缺乏独立思考的能力和对理论思辨的不重视有关,而功利、片面而不充分的教学加重了这个问题。

2022-10-06 18:59:26 804

原创 C++如何计算一个函数有多少行?

虽然我不知道什么人会提出这种问题,总之不是我,但是还是可以的。

2022-10-05 16:00:13 232

原创 C++多字节字符

我们直接看以下代码很多老师,很多书,喜欢出诸如此类的一些牛马题目,尤其还喜欢问你们,它的值是什么,比如上面这个c的值,愚蠢,天大的愚蠢。

2022-10-04 20:19:40 369

原创 C++实现一个带溢出检测的数值类

C++实现一个带溢出检测的数值类,它的检测仍有问题,如有建议还望告知。

2022-10-04 09:59:59 262

原创 C/C++三标符

c和cc的打印结果是一样的,原因是什么?​问号转义序列\?用于阻止在字符串字面量内转译三标符:如"??/"的字符串被编译成"\",但如果在"?\?/"中转义第二个问号,那么它会变成"??/"。由于三标符已从 C++ 移除,不再需要使用问号转义序列。它因为需要与 C++14 (及之前标准版本)及 C 的兼容而保留。(C++17 起)​三标符(C++17 中移除)下列三字符组(三标符,trigraph)在辨识注释和字符串字面量之前被分析,而三标符的每次出现都会被替换成对应的首​

2022-10-04 09:51:18 772

原创 C语言在Windows环境自己实现一个无回显的getch

【代码】C语言在Windows环境自己实现一个无回显的getch。

2022-09-25 15:50:14 411

原创 C++协程的基本使用

【代码】C++协程的基本使用。

2022-09-24 19:45:41 739

原创 cpp如何写入读取utf-32编码的文件

我们使用的是c++17的filesystem的库进行编码转换,U是表示32位Unicode的字面量。

2022-09-23 14:03:10 332

原创 C++模板进阶:SFINAE

requires约束是c++20的特性,与它相比,std::enable_if简直就是垃圾,但是很多库和公司标准并没那么高,也就只能使用std::enable_if了。enable_if这个特化形式中,压根就没有这个::type,也就失败了,不会匹配上,当然这也不会error。模板经过编译器实例化后就是这样,我们可以看到这个函数第二个类型就是void了,这是因为。我们不再介绍它,知乎的大佬对此介绍的很好,我们只为了重复记忆。,会产生一个void,反之,如果不符合里面的条件,这里是。

2022-09-20 21:26:20 351

原创 实现std::is_same_v

如果没学过类偏特化先去学习一下,如果没学习过c++14变量模板,先去学习一下。

2022-09-19 11:28:36 775

原创 C#快速入门

我们都知道的三种类型/成员修饰符public、protected、private,也明白它们所表示的含义,internal也是一各类型/成员修饰符(被修饰的类型或者成员称为内部类型或成员),只是它所修饰的类。. 成员的定义是派生类的责任。我们再总结一下Action与Func的区别,我们写泛型函数接Func的时候,因为Func的第一个类型是传入类型,所以我们的T就用了两次。Action是无返回值的lambda,Func是有返回值的lambda,Func中类型列表的最后一个类型表示的是它要返回的类型。

2022-09-17 11:44:14 439

C++源代码项目,大约有好几万,基础到进阶

C++源代码项目,大约有好几万,基础到进阶

2022-04-20

c/c++笔记,很多自己写的代码和程序

主要是一些代码和程序

2022-04-04

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除