![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 50
写有意思的代码
这个作者很懒,什么都没留下…
展开
-
《C++ API设计》第6章 C++用法读书笔记
《C++ API设计》第6章 C++用法读书笔记原创 2022-04-28 22:03:05 · 1621 阅读 · 0 评论 -
基于C++11的可中断睡眠功能实现
源文件InterruptibleSleep.h#pragma once#include <atomic>#include <chrono>#include <mutex>namespace UtilityTools { using namespace std; class InterruptibleSleep { public: bool start(const chrono::milliseconds & durInMS);原创 2021-12-30 19:54:14 · 834 阅读 · 0 评论 -
按指定条件从C++11 map中删除元素
问题无法使用remove_if配合map容器的erase操作按指定条件从map容器删除元素。C++11 解决方案可以使用一下函数实现这个需求:template<typename K, typename V>void filterMap(map<K, V> & mapObj, bool(*pred)(const K &, const V &)){ for (auto it = mapObj.begin(), ite = mapObj.en原创 2021-12-14 19:49:43 · 1694 阅读 · 1 评论 -
基于C++11的简单日志库
程序开发时,往往只需要在控制台打印日志。但是很多日志库(如Boost.Log)虽然提供很多功能,但集成起来比较麻烦。所以需要一个功能简单,能快速集成,外部依赖少的日志库。原创 2021-11-24 16:02:21 · 758 阅读 · 0 评论 -
BOOST_SCOPE_EXIT在C++11中的替代方案
背景Boost库中的BOOST_SCOPE_EXIT宏用于在程序退出当前区块时执行指定操作,例如下面的代码{ int * ptr = new int; BOOST_SCOPE_EXIT(ptr) { delete ptr; std::cout << "Delete pointer" << std::endl; } BOOST_SCOPE_EXIT_END std::cout << "原创 2021-11-22 21:02:28 · 979 阅读 · 0 评论 -
Windows中测量线程真正使用CPU的时间
#include <windows.h>#include <processthreadsapi.h>#include <chrono>#include <iostream>#include <stdexcept>#include <string>#include <thread>void GetThreadRunTimeInfoInWin(long double & dKrnlTmInMS, .原创 2021-08-02 20:58:32 · 387 阅读 · 0 评论 -
Boost.Lockfree官方文档
目录介绍与动机简介与术语非阻塞数据结构的性质非阻塞数据结构的性能阻塞行为的来源数据结构数据结构配置示例队列栈无等待单生产者/单消费者队列脚注介绍与动机简介与术语术语“非阻塞”表示并发数据结构,该结构不使用传统的同步原语(例如警卫程序)来确保线程安全。 Maurice Herlihy和Nir Shavit(比较“多处理器编程的艺术”)区分了3种类型的非阻塞数据结构,每种结构具有不同的属性:如果保证每个并发操作都可以在有限的步骤中完成,则数据.翻译 2021-05-16 23:52:48 · 804 阅读 · 1 评论 -
Boost库个人感觉好用的模块
Boost库个人感觉好用的模块原创 2021-05-10 09:57:30 · 481 阅读 · 0 评论 -
C++11 类头文件不暴露私有变量的一种写法
动机在类的头文件中不暴露私有变量,目的一般有两个:1. 提供给别人的dll对应的头文件中,不希望在头文件中暴露私有变量的名称;2. 因为私有变量的类型需要包含另一个头文件,所以不希望在头文件中包含其它头文件;示例头文件#pragma once#include <memory>#include <string>class Person{public: Person(const std::string & sName); Person(co原创 2021-04-19 17:29:02 · 1713 阅读 · 0 评论 -
C++常用工具函数
文件相关h文件#pragma once#include <string>class FileUtil{public: /** \brief 检查指定路径的文件是否存在 \param sFilePath 待检查文件路径 \return 指定路径的文件是否存在 \except 该函数可能抛出异常 \note 该函数是多线程安全的 */ static bool isFileExist(const std::string & sFilePath);原创 2021-04-14 17:02:10 · 706 阅读 · 0 评论 -
基于C++11的跨线程简单消息队列
目录示例代码运行结果源代码示例代码#include "MessageQueue.hpp"#include <thread>#include <iostream>#include <chrono>using namespace std;using namespace std::chrono;MessageQueue<int> mq;void send(){ for (int i = 0; i < 10;.转载 2021-03-27 11:07:24 · 684 阅读 · 0 评论 -
qmake 3.1(Qt 5.14.0使用)用户手册8——使用预编译头
预编译头(PCH)是某些编译器支持的性能功能,用于编译稳定的代码体,并将代码的编译状态存储在二进制文件中。 在后续编译期间,编译器将加载存储的状态,并继续编译指定的文件。 由于不需要重新编译稳定的代码,因此每个后续编译都更快。原创 2020-01-26 10:31:20 · 553 阅读 · 0 评论 -
qmake 3.1(Qt 5.14.0使用)用户手册4——创建常见类型的项目
目录建立应用程序建立一个测试用例创建库创建插件创建Qt Designer插件在调试和发布模式下创建和安装在两种模式下构建在两种模式下安装本章介绍如何为基于Qt的三种常见项目类型设置qmake项目文件:应用程序,库和插件。 尽管所有项目类型都使用许多相同的变量,但是每个项目类型都使用特定于项目的变量来自定义输出文件。此处不介绍特定于平台的变量。 有关更多信息,...原创 2020-01-23 16:37:43 · 608 阅读 · 0 评论 -
qmake 3.1(Qt 5.14.0使用)用户手册9——配置qmake
目录属性QMAKESPEC缓存文件文件扩展名属性qmake有一个用于持久配置的系统,该系统允许您在qmake中设置一次属性,并在每次调用qmake时对其进行查询。 您可以在qmake中设置属性,如下所示: qmake -set PROPERTY VALUE适当的属性和值应替换为PROPERTY和VALUE。您可以从qmake检索以下信息: qm...原创 2020-01-26 15:54:59 · 2454 阅读 · 0 评论 -
qmake 3.1(Qt 5.14.0使用)用户手册8——高级用法
目录添加新的配置功能安装文件添加自定义目标添加编译器库依赖添加新的配置功能通过qmake,您可以通过将其名称添加到CONFIG变量指定的值列表中来创建可包含在项目文件中的功能。功能是.prf文件中的自定义函数和定义的集合,这些文件可以驻留在许多标准目录之一中。这些目录的位置定义在许多地方,当qmake查找.prf文件时,它们按以下顺序检查每个目录:在QMAKE...原创 2020-01-26 08:59:46 · 1103 阅读 · 0 评论 -
qmake 3.1(Qt 5.14.0使用)用户手册7——qmake语言
目录操作符赋值追加值去除价值添加唯一值替换值变量扩展访问qmake属性域域语法域和条件配置和域平台域值变量替换功能测试函数许多qmake项目文件使用“名称=值”和“名称+=值”定义的列表来简单描述项目使用的源文件和头文件。 qmake还提供了其他运算符,函数和域,可用于处理变量声明中提供的信息。 这些高级功能允许从单个项目文件为...原创 2020-01-25 10:07:46 · 811 阅读 · 0 评论 -
qmake 3.1(Qt 5.14.0使用)用户手册6——平台说明
基本的qmake配置功能可以处理许多跨平台项目。但是,在某些平台上,利用特定于平台的功能有时是有用的,甚至是必要的。 qmake知道许多这些功能,可以通过特定变量访问这些功能,这些变量仅在相关的平台上有效。macOS,iOS,tvOS和watchOS这些平台特有的功能包括支持创建通用二进制文件,框架和捆绑软件。源和二进制包源软件包中提供的qmake的版本与二进制软件包中提供的qma...原创 2020-01-25 09:21:34 · 705 阅读 · 0 评论 -
qmake 3.1(Qt 5.14.0使用)用户手册5——运行qmake
目录命令语法操作模式文件参数常规选项Makefile模式选项项目模式选项通过在命令行上指定各种选项,可以自定义qmake的行为。 这样可以微调构建过程,提供有用的诊断信息,并可用于指定项目的目标平台。命令语法运行qmake的语法采用以下简单形式: qmake [mode] [options] files操作模式qmake支持两种不同的操作模式。 ...原创 2020-01-24 11:08:38 · 3272 阅读 · 0 评论 -
qmake 3.1(Qt 5.14.0使用)用户手册3——创建项目文件
项目文件包含qmake生成应用程序,库或插件所需的所有信息。通常,您使用一系列声明来指定项目中的资源,但是对简单编程结构的支持使您能够描述针对不同平台和环境的不同构建过程。原创 2020-01-21 23:26:43 · 1025 阅读 · 0 评论 -
qmake 3.1(Qt 5.14.0使用)用户手册2——快速入门
本教程教您qmake的基础知识。原创 2020-01-21 22:50:05 · 624 阅读 · 0 评论 -
qmake 3.1(Qt 5.14.0使用)用户手册1——总览
目录总览描述一个项目建立一个项目使用第三方库预编译头本系列文章翻译qmake 3.1的用户手册,该版本qmake在Qt 5.14.0中使用。qmake工具有助于简化跨不同平台的开发项目的构建过程。 它可以自动生成Makefile,因此只需要几行信息即可创建一个Makefile。 您可以将qmake用于任何软件项目,无论是否使用Qt编写。qmake根据项目文件中的信息...原创 2020-01-21 22:21:53 · 678 阅读 · 0 评论 -
QProcess类官方简介
目录运行过程通过通道通信同步进程APIWindows用户注意事项运行过程要启动进程需要将要运行的程序的名称和命令行参数作为参数传递给start()函数。设置参数的方式有两种:方式一,将参数保存在QStringList对象中; 方式二,调用setProgram()函数和setArguments()函数进行设置。最后,调用start()函数或open()函数启动进程。例如,以下代码片段通过在参数列表中传递包含“ -style”和“ fusion”在X11平台上以Fusi.翻译 2020-07-18 16:55:42 · 1373 阅读 · 0 评论 -
QDataStream类的官方简介
数据流是编码信息的二进制流,它与主机计算机的操作系统,CPU或字节顺序无关。 例如,运行Windows的Sun SPARC可以读取Windows下PC写入的数据流。您还可以使用数据流来读取/写入未编码的原始二进制数据。 如果要“解析”输入流,请参见QTextStream。QDataStream类实现C ++基本数据类型的序列化,例如char,short,int,char *等。更复杂的数据的序列化是通过将数据分解为基本单元来实现的。数据流与QIODevice紧密协作。 QIODevice表示一种翻译 2020-07-17 11:23:47 · 1802 阅读 · 1 评论 -
自己用过的好用的C++第三方库汇总
目录综合库Boost网络库cpp-httplib简介链接工具库cpp-base64简介链接综合库Boost官网地址:https://www.boost.org/编译好的库下载地址:https://sourceforge.net/projects/boost/files/boost-binaries/网络库cpp-httplib简介一个C++ 11只包含头文件的跨平台HTTP/HTTPS库。设置非常容易。 只需在代码中包含htt.原创 2021-02-04 13:38:22 · 4552 阅读 · 0 评论 -
C++查询Windows的版本和位宽、判断系统类型
目录查询系统位宽查询系统版本判断系统类别查询系统位宽bool is64BitOS(){ typedef VOID(WINAPI *LPFN_GetNativeSystemInfo)(__out LPSYSTEM_INFO lpSystemInfo); LPFN_GetNativeSystemInfo fnGetNativeSystemInfo = (LPFN_GetNativeSystemInfo) GetProcAddress(GetModuleHandleW(L"k.原创 2020-12-16 18:05:02 · 902 阅读 · 0 评论 -
C++中如何跳出当前代码块
问题实现类似如下跳出代码块功能但不使用goto:{ ... if(condition) goto pos_out; ...}pos_out:...解决方案[&](){ ... if(condition) return; ...}();参考文章How to jump out of a C++ code block?...转载 2020-11-26 08:28:13 · 728 阅读 · 0 评论 -
希尔排序C++代码示例
#include<exception>#include<iostream>#include<functional>#include<utility>using namespace std;using uint = unsigned int;template<typename T>void shellSort(T *data, uint len, function<bool(T,T)> cmp) { //检查参.原创 2020-08-21 17:10:30 · 291 阅读 · 0 评论 -
单链表示例代码
#include <iostream>#include <cassert>using namespace std;//定义单链表节点class Node{public: Node() : data(0), next(nullptr) {}; int data; Node *next;};/** * @brief 根据用户输入的数据创建单链表 * @param 无 * @return 单链表头节点的指针 */Node *cre.原创 2020-08-13 15:52:50 · 243 阅读 · 0 评论 -
Qt5网络编程官方教程
Qt网络模块提供了允许您编写TCP/IP客户端和服务器的类。它提供了代表低级网络概念的低级类(例如QTcpSocket,QTcpServer和QUdpSocket),以及高级类(例如QNetworkRequest,QNetworkReply和QNetworkAccessManager)来使用通用协议执行网络操作。它还提供实现连接管理的类,例如QNetworkConfiguration,QNetworkConfigurationManager和QNetworkSession。与网络编程相关的Qt类Qt翻译 2020-07-16 21:59:49 · 1716 阅读 · 1 评论 -
函数可重入与线程安全的QT官方解释
术语“可重入”和“线程安全”用以指示函数如何在多线程应用程序中使用:可以从多个线程同时调用线程安全函数,即使函数使用了共享数据,因为对共享数据的所有使用都已串行化。 重入函数也可以从多个线程中同时调用,但前提是每次调用都使用自己的数据。因此,线程安全函数始终是可重入的,但可重入函数并非始终是线程安全的。扩展一下,如果可以从多个线程安全地调用类的成员函数,则该类称为可重入的,只要每个线程使用该类的不同实例即可。如果可以从多个线程安全地调用其成员函数,则该类是线程安全的,即使所有线程都使用该类的相同翻译 2020-07-15 16:19:21 · 418 阅读 · 0 评论 -
Qt多线程官方教程2——Qt中的多线程技术
Qt提供了许多用于处理线程的类和函数。 Qt程序员可以使用以下四种不同的方法来实现多线程应用程序。QThread:具有可选事件循环的低级APIQThread是Qt中所有线程控制的基础。 每个QThread实例代表并控制一个线程。QThread可以直接实例化也可以子类化。 实例化QThread提供了一个并行事件循环,从而允许在辅助线程中调用QObject槽。 子类化QThread允许应用程序在开始其事件循环之前初始化新线程,或者在没有事件循环的情况下运行并行代码。有关如何使用QThread的演原创 2020-07-14 12:04:55 · 730 阅读 · 0 评论 -
Qt多线程官方教程1——Qt中的线程支持
Qt提供线程支持的方式:平台无关的线程类,线程安全的消息通知方式,跨线程的信号插槽连接。 这使得开发可移植的多线程Qt应用程序和利用多处理器机器变得容易。 多线程编程也是执行耗时的操作而不冻结应用程序用户界面的常用方法。Qt的早期版本提供了一个在没有线程支持的情况下编译Qt的选项。 从Qt 4.0开始,Qt编译始终启用线程支持。主题这些文章假定读者具有有关多线程应用程序的基本知识。线程类 Qt中的多线程技术 同步线程 重入和线程安全 线程和QObject Qt模块中的线程支持线程原创 2020-07-14 11:26:25 · 458 阅读 · 0 评论 -
C++智能指针6——总结
目录性能问题使用问题C++ 11提供了智能指针的两个概念:shared_ptr用于共享所有权 unique_ptr用于独占所有权后者代替了现在不推荐使用的C++ 98的auto_ptr。性能问题为什么C++标准库提供不止一种智能指针?答案与共享指针的性能影响有关。shared_ptr是通过非侵入性方法实现的,这意味着该类管理的对象不必满足特定的要求,例如通用基类。最...原创 2020-02-02 10:44:52 · 320 阅读 · 0 评论 -
C++智能指针5——自动指针auto_ptr(弃用)详解
与C++ 11不同,C++ 98标准库仅提供一个智能指针类auto_ptr,自C++ 11起不推荐使用。它的目标是提供unique_ptr现在所做的语义。原创 2020-02-02 08:13:44 · 638 阅读 · 0 评论 -
C++智能指针4——唯一指针unique_ptr详解
C++11标准库提供的唯一指针unique_ptr有助于避免发生异常时的资源泄漏。它实现了专有所有权的概念,这意味着它可以确保一个对象及其关联资源一次只能由一个指针"拥有''。当此所有者被销毁或变空或开始拥有另一个对象时,先前拥有的对象也将被销毁,所有相关资源都将被释放。唯一指针unique_ptr继承了自动指针auto_ptr(该类最初是C++ 98引入的,但现在已弃用)。 唯一指针unique_ptr提供了一个简单明了的接口,与自动指针auto_ptr相比,它更不容易出错。原创 2020-02-01 19:01:22 · 6666 阅读 · 1 评论 -
C++智能指针3——弱指针weak_ptr详解
共享指针shared_ptr指针存在的一些问题可以有弱指针weak_ptr解决。原创 2020-01-30 11:21:04 · 6911 阅读 · 0 评论 -
C++智能指针2——共享指针shared_ptr详解
目录简介示例代码输出创建定义删除器示例处理数组销毁其他资源接口列表隐式指针转换比较运算符获取删除器别名构造函数make_shared()和allocate_shared()强制类型转换线程安全的接口使用错误简介共享指针shared_ptr是具有共享所有权语义的智能指针。 每当共享指针shared_ptr的最后一个所有者...原创 2020-01-29 23:03:18 · 21883 阅读 · 0 评论 -
C++智能指针1——概述
问题从C开始,指针就很重要,但却是麻烦的根源——要确保它们的生存期与它们所引用的对象的生存期相匹配,特别是当多个指针引用同一个对象时。解决方法避免此类问题的常用方法是使用“智能指针”。智能指针可以“知道”它是否是指向对象的最后一个指针,并且仅当该指针作为对象的“最后所有者”被销毁时,才删除关联的对象。分类从C++ 11开始,C++标准库提供了两种类型的智能指针:shared...原创 2020-01-18 21:12:26 · 291 阅读 · 0 评论