C/C++
文章平均质量分 85
C/C++
天赐细莲
B站关注:天赐细莲
展开
-
(C++) 为什么auto_ptr被弃用
在 C++ 中,智能指针一直是一个非常重要的模块。从 C++98 起就有了智能指针`auto_ptr`。但是其本身具有非常大的问题。因此到了 C++11 便将其弃用,并提出了三个沿用至今的智能指针 `unique_ptr; shared_ptr; weak_ptr`。到了 C++17 更是直接移除了。具体原因请继续查看下文。原创 2024-08-22 00:05:30 · 742 阅读 · 0 评论 -
(C23/C++23) 语句末尾的标签
C++23提案·复合语句末尾的标签C23提案·声明和语句块结束前的标签在C/C++的标签使用语法中,两们语言的规定并不是一致的。很容易产生写法A在C语言中可行,而C++中不行。(虽然部分编译器做了增强,但标准中就是不行)。但非常幸运的是两者都在23标准中互相做了兼容。个人猜测是那帮专家自己写要兼容的代码时觉得非常麻烦而提出的。因为标签的意义就是一个表示,且表示非常明确,编译器理应本身就能做区分。原创 2024-07-25 23:41:34 · 972 阅读 · 0 评论 -
(C++) 智能指针指定删除器
自C++11后,推出了三个智能指针。其中unique_ptr和shared_ptr可以指定删除器。但两者的形式却不太一样,本文将带你了解两者的基础使用区别。原创 2024-07-23 22:44:47 · 634 阅读 · 0 评论 -
(Qt) 文件读写基础
本文资料和测试版本为Qt 5.15。原创 2024-07-22 22:42:12 · 524 阅读 · 0 评论 -
(C++) 文件读写基础
📄分点讲解C++用类封装了流式操作,使用体验是更加丰富,更加多。🗃️写法1:法2:法3:🗃️读法1:法2:法3:法4:法5:原创 2024-07-22 22:40:57 · 815 阅读 · 0 评论 -
(POSIX) 文件读写基础
📄分点讲解说白了,这就是最标准的 POSIX 的对文件描述符fd的操作方式。淡然posix下的文件操作和读写不知这简单的几种,但掌握最基本的以下几种是必备的。原创 2024-07-22 22:32:45 · 313 阅读 · 0 评论 -
(C语言) 文件读写基础
文件输入/输出 - cppreference.com。原创 2024-07-22 22:31:50 · 990 阅读 · 0 评论 -
(Effective C) 2.3 作用域
作用域应用于标识符的某个特定声明。标识符包含对象函数标签宏等等。作用域是一块连续的区域,在域的任何位置,可以访问当前位置的前面区域的标识符。原创 2024-06-24 00:41:13 · 336 阅读 · 0 评论 -
(C++语言的设计和演化) C++的设计理念
译者《C++语言的设计与演化》目录 (pku.edu.cn)《C++语言的设计与演化》有关信息 (pku.edu.cn)豆瓣C++语言的设计和演化 (豆瓣) (douban.com)出版社(异步图书)C++语言的设计和演化-异步社区实验平台 (epubit.com)本文主要摘取书本第4章 C++语言设计规则和第6章 标准化和第8章 库。是一些关于之父对于在 C++ 中设计和思考中得出的一些明文条例。原创 2024-06-21 01:20:43 · 864 阅读 · 0 评论 -
(C++) 函数重载机制
在C++中函数重载是一个非常强大由复杂的问题。在C++中本身就有许多函数机制,加上该语言也在不断的迭代,规则是越来越多。原创 2024-06-07 00:59:07 · 821 阅读 · 0 评论 -
(C11) 泛型表达式
只能判断一个表达式的类型,因此如果是需要用到多参的话,可以嵌套的使用。关注我,学习更多C/C++,算法,计算机知识。不是必须写道最后一个,顺序这方面没有限制。可以根据类型指定调用的函数,注意参数个数。与控制表达式类型兼容,则程序无法编译。关联,则解释为其后的表达式。,若其类型与各关联之一的。,则解释为冒号后的表达式。限定符对类型识别不受影响。对指针类型的判断仍然使用。时,并且直接调用的情况。只在类型域中进行转换。可以判断自定义类型。原创 2024-05-28 20:49:27 · 1126 阅读 · 0 评论 -
(C++) share_ptr 之循环引用
unique_ptrshared_ptrweak_ptr都是内存管理中的非常重要的一部分动态内存管理 - cppreference.com。其中shared_ptr在实际应用中具有非常广泛的应用。而由于其较unique_ptr的功能多,有引用计数的概念。导致存在一个名为循环引用的问题。这是一个非常经典的坑。但解决方案也不是很复杂。下面来一起看看吧。原创 2024-04-25 21:38:38 · 1336 阅读 · 0 评论 -
(C++) 内类生成智能指针shared_from_this介绍
unique_ptrshared_ptrweak_ptr都是内存管理中的非常重要的一部分动态内存管理 - cppreference.com。其中shared_ptr在实际应用中具有非常广泛的应用。而拷贝操作也是非常常见和重要的操作。在类外可以直接使用默认的拷贝构造和拷贝赋值,而类内呢?显然这两种默认的拷贝操作均不适用。本文就是讲解使用来处理该问题。原创 2024-04-24 20:24:41 · 1111 阅读 · 0 评论 -
(C++) this_thread 函数介绍
在C++11起,标准规定了标注的并发库。头文件为并发支持库 (C++11 起) - cppreference.com其包含线程、原子操作、互斥、条件变量和 future 的内建支持。而其中有一个namespace为,里面有四个重要的全局函数,其实现都与当前系统环境和编译器强绑定。std::this_thread 符号索引 - cppreference.comget_id()yield()返回当前线程的id。这个id是一个的内部类型。其实现依附于所在平台。原创 2024-04-24 20:20:32 · 2058 阅读 · 0 评论 -
(C++17) std算法之执行策略 execution
算法库-执行策略 - cppreference.com利用多核cpu加速算法在目前看来已经不是什么新鲜事了。在C++17中,推出了算法函数的执行策略,可以选择执行策略来优化算法的执行效果。(注意不是所有算法都支持)目前到C++20,已经支持了四种执行策略。当然本文也仅仅是做简单的展示和描述,因此内部细节十分复杂不是几篇端文章就能看懂的。标准策略执行策略类型(类)全局执行策略对象(常量)C++17串行执行C++17并行执行C++17并行无序执行C++20无序执行功能特性测试值标准。原创 2024-03-29 23:38:54 · 1066 阅读 · 0 评论 -
(C++) 属性说明符-标准属性
本文着重讲解属性说明符的标准属性(C++) 属性说明符-语法属性说明符是一种与具体编译器强绑定的内容。有的属性可以作为编译器的提示,有的则是直接作为设置。在C++11之前,不同编译器拥有不同的语法,不同的说明符。在编写跨平台程序时非常麻烦,移植性一直不是很好。到了C++11标准终于规定了属性说明符的标准。但是所支持的说明符随着标准的提出还不是很多。但该语法仍然允许使用编译器自身的说明符,为以后的扩展做了一定的预留。原创 2024-03-29 00:38:00 · 1096 阅读 · 0 评论 -
(C++) 属性说明符-语法
本文着重讲解属性说明符的语法属性说明符是一种与具体编译器强绑定的内容。有的属性可以作为编译器的提示,有的则是直接作为设置。在C++11之前,不同编译器拥有不同的语法,不同的说明符。在编写跨平台程序时非常麻烦,移植性一直不是很好。到了C++11标准终于规定了属性说明符的标准。但是所支持的说明符随着标准的提出还不是很多。但该语法仍然允许使用编译器自身的说明符,为以后的扩展做了一定的预留。原创 2024-03-29 00:36:51 · 851 阅读 · 0 评论 -
(C++20) jthread中stop_token的基础使用
在多线程中单单使用循环判断一个标志是效率比较低的。如果能将一个线程进行挂起那CPU的效果会提升很多。最普通的方式就是循环判断。这对于常见的线程封装来说很常见。在C++20中推出了jthread。关注我,学习更多C/C++,算法,计算机知识。该sstoken与线程对象绑定。会自动调用注册的callback。回调函数的声明周期,跟随回调对象。对象注册一个监控停止的回调。能够接受一个第一个参数为。原创 2024-03-20 18:25:16 · 653 阅读 · 0 评论 -
(C语言) print输出函数系列介绍
Linux 和 libc 给您拜 年 啦在这辞旧迎新的美好时刻:🧨 printf 携手 fprintf, dprintf, sprintf, snprintf, vprintf, vfprintf, vdprintf, vsprintf, vsnprintf, fputc, fputs, putc, putchar, puts 祝您新的一年能大展宏图。原创 2024-03-20 18:23:56 · 1595 阅读 · 0 评论 -
(C++) 如何设计一个安全的pop函数
下面为了方便,采用继承而不是组合的方式来处理。请注意在调用模板基类内容时候的一些注意点,本文不会讲解这块基础。有一些激进派认为,空栈的pop直接抛出一个确定的异常,但本文没那么粗暴。且默认采用移动语义,缺点是对于一些确定删除移动语义的对象会报错,当然这类对象比较少。原创 2024-03-07 21:21:35 · 1475 阅读 · 0 评论 -
(C语言) time库-日期和时间工具
日期和时间工具 - cppreference.com是在C语言中的日期与时间工具。其中主要有三大模块,常量,类型和函数。在C++中推荐写成,基本都是继承.h中的东西。函数主要分为两类,时间操作函数和格式转换函数。本文主要为C语言中的标准操作,其中在C11和C23又添加和废弃了许多内容,但这块不会本文着重讲解。UTC 协调世界时纪元(地球纪元)夏令时原创 2024-03-01 21:14:12 · 1588 阅读 · 0 评论 -
(C++20) span简单实现
而入错传递的是一个视图,这个视图能够指向原对象,那么这个直接传递的开销也是我们可以接受的。关于std::vector和std::array相对比较方便,也是大家平时直接应用的方式。到了C++中泛化出了迭代器的标准。关于这里的第二个传入首位位置的版本,需要允许两者直接的相互减。可见具有动态长度的std::vector在这里是最方便的。在不传递引用的情况下,传递对象在很多时候会巨大的性能损耗。这里的主要难点就是对构造函数的实现,如何获得首地址和长度。是C语言中传数组的最常见形式。高,不然无法获得数组的引用。原创 2023-12-01 22:59:06 · 676 阅读 · 0 评论 -
(C++20) constinit常量初始化
来解决该问题,因为C++保证了局部静态变量只有在第一次调用到的时候才初始化,这也是著名设计模式,单例模式中最常用的一个技巧。constinit 也能用于非初始化声明,以告知编译器 thread_local 变量已被初始化,以减少隐藏的防卫变量所致的。由于多文件编译顺序等一些列问题,可能又有第三个或者更多对象对这两个有了依赖,就会出现一些列意想不到的问题。在C++多文件编译中会出现一个常见的问题,叫做静态初始化顺序问题。constinit 可以针对具有静态存储方式的对象的声明上。是在编译期间确定初始值。原创 2023-12-01 00:04:30 · 635 阅读 · 0 评论 -
(C++20) consteval立即函数
可见普通函数和constexpr函数都可以在汇编函数中展现,但是consteval函数并没有,这也正解释了为什么为什么不能获取函数指针。但是对于constexpr修饰的函数来说,无法保证严格的在编译器确定。下面这段代码,fun1正常编译运行,但是到了fun2就会编译失败。这里举个例子,一般函数我们可以获取它的地址,并赋到一个函数指针上。编译器会自动检测上下文的常量性质,因此下面这段代码也是可性的。说到函数怎么能少得了lambda函数,在参数后添加关键字即可。再具体的我们来查看汇编代码,便会一目了然!原创 2023-11-30 22:50:45 · 798 阅读 · 0 评论 -
(C++17) variant的使用与union对比
联合体,是在C语言时代就存在的概念。主要应用在一些收内存限制较大的情景。但是传统C的限制太大,但是到了C++中给出了更安全的类型variant。原创 2023-11-10 00:01:22 · 687 阅读 · 0 评论 -
(C++17) any的使用与简单实现
在C++这种静态强类型语言中,在一些开发场景下有时需要一种万能类型。好在C++中有模板类的技术,通过继承的方式,达到类型擦除的效果。然后主要是能够做到不同数据类型的切换,普通的方法肯定是不行的。首先很使用智能指针可以帮我们减少很多对内存问题的负担。因为涉及各种数据类型问题。描述用于任何类型的单个值的类型安全容器。借助模板技术,我们可以手动实现一个Any。注意转为右值引用时候注意所有权的问题。自行注意各种应用在使用的时候的区别。可见内是对对象进行了重新的构造。某次的测试结果是这样的。原创 2023-11-09 18:56:03 · 602 阅读 · 0 评论 -
(C++17) optional的使用
optional 》adj.可选择的,选修的在编程与实际项目中,可能会出现数据不合法的需求与状态。在以往通常的使用中,通常会为每种数据类型定义一个值作为不合法的标志。比如int = -1等等。编写时麻烦这些不合法数据在有的场景下可能是有效的团队协作时需要来回确认等等为了处理这种可能出现不合法的情况,C++17推出了来处理这个问题。在C++20和C++23对此还进行了加强,但本文不对这些加强做过多演示。原创 2023-11-08 23:54:29 · 231 阅读 · 0 评论 -
(线程池) 100行以内的简单线程池
线程池_百度百科 (baidu.com)线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。原创 2023-08-30 21:00:33 · 388 阅读 · 0 评论 -
(内存池) 基于嵌入式指针的简单内存池
内存池_百度百科 (baidu.com)(Memory Pool)是一种内存分配方式,又被称为固定大小区块规划(fixed-size-blocks allocation)。通常我们习惯直接使用new、malloc等API申请分配内存,这样做的缺点在于:由于所申请内存块的大小不定,当频繁使用时会造成大量的内存碎片并进而降低性能。内存池的实现方式多种多样,而本文仅实现一个简单的内存池,主要运用到嵌入式指针。嵌入式指针,指的在数据单元中,用一部分空间保存某一块空间的地址信息。实现方式多种多样。原创 2023-08-22 23:59:24 · 875 阅读 · 0 评论 -
(C++) 多线程之生产者消费者问题
生产者消费者问题_百度百科 (baidu.com)生产者消费者问题 (英语:Producer-consumer problem),也称有限缓冲问题(英语:Bounded-buffer problem),是一个多线程同步问题的经典案例。该问题描述了两个共享固定大小缓冲区的线程——即所谓的“生产者”和“消费者”——在实际运行时会发生的问题。condition_variablethreadmutexlock_guardunique_lockwait原创 2023-08-04 00:04:03 · 1356 阅读 · 0 评论 -
C/C++ 内存管理
本项目主要记录各类在C/C++使用过程中,有关内存的各种事项。内存泄漏内存溢出访问越界等等。- 内存泄漏 **memory leak** - 内存溢出 **out of memory**- 访问越界 **access violation**原创 2023-07-20 22:44:32 · 112 阅读 · 0 评论 -
(Linux) 套接字socket基础
C/C++没有标准的网络库,因为都需要用到各个平台的接口才行。本文讲解Linux下最基础的socket编程,实现一个简单的回声服务器。socket bindlisten acceptrecv sendconnect close原创 2023-07-05 00:40:02 · 394 阅读 · 0 评论 -
(C++) Cpp20 概念和约束
模板技术是c++中的一项非常重要的技术。而SFINAE更是在整个体系中起着举足轻重的分量。而对于支撑这概念的各种技巧也是在不断发展。std::enable_if#include #include concept requires表达式原创 2023-07-01 00:33:41 · 558 阅读 · 0 评论 -
(C++) 简单实现vector
对于自己尝试写的一些模仿标准库等操作。永远不要觉得自己实现的有多nb,在各大编译器的标准库面前就是个弟弟。因此别再觉得自己数据结构课上写的那些基础线性表操作有多熟料,只能说人外有人,山外有山。对于实现一个vector的基本考虑数据类型的声明构造 constructor析构 destructor拷贝 移动 copy move迭代器 iterators存取器 accessor容量 capacity修改器 modifier尾部追加删除 do_back运算符重载等等等等。原创 2023-06-25 23:11:04 · 401 阅读 · 0 评论 -
(C/C++) 效率黑科技-Duff’s Device
具体如何操作,那就要看具体的编译器是怎么实现的了,一些资料显示这类函数会专门调用一些特定的汇编指令,极大的增加了运算的速度。令人惊讶的事情出现了,Duff’s Device的操作居然没有普通for循环暴力快。保证两者的操作相对位置一致。具体的,是在指针进行递增操作的同时进行解引用操作(取值操作),然后进行赋值。但是对于这个循环,循环体内的操作非常简单,但是循环判断条件确一次也不能少。分别对余量进行操作,这里的余量只可能是[0, 8]闭区间的数量。可惜的是,这种语法操作在部分语言中并不支持,如java。原创 2023-06-15 23:56:05 · 721 阅读 · 0 评论 -
(C/C++) 从错误到异常 (error->exception)
大多数人都知道异常怎么使用,但是没思考过为什么会产生这种机制。本文将从C语言的错误到C++的异常进行简单介绍和分析。“异常”是啥?何时用?如何用?0. error/exception neutrality1. no-throw guarantee (不会抛出异常)2. basic exception safety guarantee (没有资源泄露)3. strong exception safety guarantee (强异常安全)copy and swap原创 2023-06-02 23:35:58 · 453 阅读 · 0 评论 -
(C++) 手写智能指针(unique_ptr;share_ptr)
RAII资源获取即初始化C++11更是弥补了auto_ptr的缺陷,提出了unique_ptr,share_ptr,weak_ptr注意智能指针的本质就是一个模板类,通过类的内部的操作,来管理资源本文简单实现了一下原创 2023-03-20 22:35:10 · 1212 阅读 · 0 评论 -
(C++) 从stl算法的谓词 分析lambda表达式的本质
lambda表达式是C++11增加的一个新特性,深受各位开发者的喜爱。而探究lambda表达式的本质是什么,就是本文的主要内容。可见在C++11之前,无论是函数指针,还是仿函数,都是比较原始的实现谓词的方式用最简单的一句话总结就是,lambda表达式是匿名类的仿函数而编译器就是想尽各种办法去调用到这个仿函数。原创 2023-01-16 22:50:01 · 715 阅读 · 0 评论 -
(C++) 基于重载运算符的自动取模
文章目录直接上代码前言各部分介绍宏定义成员变量辅助函数构造和析构get/set仿函数标准输入输出重载`+= -= *= /=`重载`+ - * /`重载自增,自减运算符`++ --`重载比较、逻辑运算符一些使用注意点END直接上代码// #define int long long#ifndef MOD#define MOD 1e9+7class Num {private: static const int mod = MOD; int val = 0;protected:原创 2022-04-22 23:15:49 · 1673 阅读 · 1 评论 -
(C++) stl之bitset 使用小结
文章目录头文件定义定义的长度足够定义的长度不够注意点操作符方法/函数to_string()to_ulong()/to_ullong()size()any()/none()test()count()flip()reset()set()ENDbitset是一个特殊有的stl容器,顾名思义bitset是对位比特的操作,这里专指位运算操作头文件#include <bitset>#include <bits/stdc++.h>定义debug()定义#define debug(原创 2022-02-19 16:46:03 · 1111 阅读 · 3 评论