
c++
文章平均质量分 61
_沥川往事
这个作者很懒,什么都没留下…
展开
-
C/C++固定位宽类型
C/C++编程中建议使用固定位宽类型原创 2022-09-04 21:32:47 · 1329 阅读 · 0 评论 -
C++17 filesystem
C++17 filesystem的使用介绍原创 2022-08-14 18:37:33 · 5138 阅读 · 0 评论 -
C++11 错误码
在C++11中引入了库,将错误码封装成了一个类std::error_code,它可以通过一个枚举值std::errc来构造,并且可以用.message()成员方法取出来其字符串形式,增加可读性。原创 2022-08-14 12:17:31 · 1410 阅读 · 0 评论 -
c++20 ranges库
ranges库在对元素进行逐一操作或者判断时可以省掉很多循环体,使代码的可读性提高。例如,要从一个vector中拿出所有的偶数并求平方并逆序排列,生成一个新的vector,以前这样写:vector<int> v1 = {0, 1, 2, 3, 4};vector<int> v2;for (auto i : v1) { if (i % 2 == 0) { v2.push_back(i * i); }}vector<int>原创 2021-12-25 22:23:19 · 2345 阅读 · 0 评论 -
C/C++ 算术转换规则 (以及容易踩的坑)
算术转换指的是运算符的两个操作数类型不同时所发生的转换,不要小看这个点,可能会造成灾难性的程序问题。首先需要明确两个概念,后面要介绍的转换规则会依赖于这两个概念:一、整型提升https://en.cppreference.com/w/cpp/language/implicit_conversion#Integral_promotion算术运算符不接受小于int类型的变量,所以会存在以下的整型提升:signed char、signed short:转换为int unsigned char原创 2021-12-01 22:57:58 · 1713 阅读 · 0 评论 -
充分使用RAII
目录一、C++ 资源管理二、利用栈变量的析构函数三、goto四、do while(0)大法一、C++ 资源管理写代码时经常会碰到这种情况:在函数开始时申请了buffer、或打开了某文件、打开某so,需要在函数返回前做对应的释放或关闭操作。不使用任何语言机制的情况下,写出来的代码是这样的:void before() { uint8_t *a = new uint8_t[10]; double *b = new double(1.2); if (xxx) {原创 2021-11-16 23:05:10 · 895 阅读 · 0 评论 -
C++17新特性——std::optional
我们在写代码过程中可能经常会碰到这样的情况:某个函数经过一系列计算后获取一个返回值,但是这个函数可能在执行过程中有异常分支,从这些异常分支中return出来的时候还没有得到这个想计算的值。 例如想计算得到一个无符号类型,我们可能会在这些异常分支return一个-1出去,用来表示计算失败,或执行有误,甚至不同的负值用来表示不同的异常情况。。。由于这些值的存在,本来返回值应该是uint32类型,为了容纳可能出现的负值和整个uint32的范围,返回值就变成了int64。。。这个int64,竟然要么表示错误码.原创 2021-07-04 12:18:56 · 5924 阅读 · 6 评论 -
clion中文乱码的问题
windows平台的乱码一般都是因为在我国windows系统的默认编码方式是GBK,这导致了很多兼容性问题。我们需要把clion设置里所有编码方式通通都改成UTF-8File->Settings->Editor->File Encodings,全部改成UTF-8以及控制台输出也改成UTF-8,File->Settings->Editor->General->Console打印中文时会从"Run"这个标签页输出,我们也要把这个标签页的编原创 2021-07-03 14:04:05 · 1092 阅读 · 1 评论 -
C++ 左值、右值、左值引用、右值引用
一、左值右值1.1 定义在C++中有几个晦涩的概念:左值、右值、泛左值、纯右值、将亡值泛左值=左值+将亡值; 右值=纯右值+将亡值; 我们可以发现将亡值既属于泛左值又属于右值;这些分类是由于它们具有不同性质而命名的,但其实我们只需要掌握左值和右值的概念就已经足够了。这5种值类型我总结了一张表格,如下:首先这几个名词用来形容一个表达式,在C++中,一切表达式都必然属于左值、将亡值、纯右值中的一种。而右值=将亡值+纯右值,所以我们又可以说一切C++表达式都必然要么是左值要么是右值。原创 2021-05-19 23:53:04 · 723 阅读 · 8 评论 -
c++模板进阶、完美转发
当我们要定义的代码逻辑一样,但只是处理类型不一样时,模板的作用就体现出来了。使用模板可以极大的减少代码冗余、使代码简洁强大。本文不赘述模板,只探讨一些需要注意的语法点。1.非类型模板参数在模板参数列表中,除了类型参数外,还可以使用非类型参数;但在实例化非类型参数时必须使用常量表达式。例如下面这个对C风格数组求和的函数模板:#include <iostream>using namespace std;template<typename T, size_t N.原创 2021-05-19 00:02:58 · 340 阅读 · 0 评论 -
C++中实现回调的几种方式
考虑两个类之间的异步场景:客户端调用类A处理某个任务,A需要委托B进行一些处理并返回结果;并且都是异步进行,即函数迅速返回之后在后台进行计算,完毕后通知调用者。一、使用函数指针类B需要有SetCallBack接口来接收函数指针,此处我们用std::function来实现。 B在进行ProcessAsync任务时另起一个线程并detach掉去进行较长时间的后台计算(此处用std::this_thread::sleep_for来模拟长时间计算),计算完成后通过刚才设置进来的函数指针来通知调用者。#原创 2021-01-27 23:46:33 · 11158 阅读 · 5 评论 -
tinyxml读取xml文件
xml中每个元素element的组成唯一的name 多个attribute(每个attribute包含name和value) 注释comment 文本Text 多个子element<?xml version="1.0" encoding="UTF-8"?><ffprobe> <format filename=".\Westworld.S03E01.720p.WEB.H264-XLF[eztv].mkv" nb_streams="3" nb_progra原创 2021-01-12 23:28:00 · 752 阅读 · 2 评论 -
在windows上通过msys2/mingw来安装gcc / clang
安装msys2https://www.msys2.org/设置msys2的镜像源,参考https://mirrors.tuna.tsinghua.edu.cn/help/msys2/打开安装目录,例如 D:\msys64\etc\pacman.d 分别修改这三个文件:编辑 mirrorlist.mingw32 文件,在文件开头添加Server = https://mir...原创 2020-04-05 22:04:47 · 12407 阅读 · 0 评论 -
C++设计模式——抽象工厂模式
抽象工厂提供一个创建一系列相关或相互依赖的对象的接口,而无需指定它们具体的类。它主要解决产品族和产品等级的问题,例如产品族(即生产厂家)有美的和海尔,产品等级有空调和冰箱,那么所有的产品就有:美的空调、美的冰箱、海尔空调、海尔冰箱这四种。抽象工厂首先实例化产品族,然后再实例化产品等级。#include <iostream>using namespace std;//-...原创 2020-03-22 18:43:47 · 260 阅读 · 0 评论 -
C++设计模式——工厂模式
工厂模式是为了解耦,将对象的创建和使用分离开。在客户端使用对象时,只需要知道对象的名称即可用一个共同接口来使用,而具体的创建过程对使用者屏蔽,所有对象的创建过程都由工厂来统一管理。工厂模式分为三种:①简单工厂模式 ②工厂方法模式 ③抽象工厂模式; 本文介绍前两种。①简单工厂模式只需要建一个工厂类,在该类中进行判断和对象创建。当需要增加新类型对象时,只需新增对应类,并修改工厂类即可。②工...原创 2020-03-21 21:38:45 · 255 阅读 · 0 评论 -
c++ 判断文件夹是否存在,不存在则创建(可建多级目录)
c++中,<io.h>中的_access可以判断文件是否存在,<direct.h>中的_mkdir可以创建文件。建单级目录:#include <io.h>#include <direct.h>#include <string>int main(){ std::string prefix = "G:/test/"...原创 2019-03-18 17:19:05 · 38319 阅读 · 6 评论 -
windows下编译tensorflow源码 用其c++接口调用训练好的模型
2019.5.31更新:最近在研究如何用tensorflow的python库训练模型,生成pb文件,再在c++中调用这个模型,完成前向的预测。具体步骤如下:①在python中,用tensorflow的python库,训练模型,并生成pb文件;②准备好tensorflow的c++库;③在c++中用tensorflow的API来调用这个pb文件,完成前向计算过程。下面分...原创 2018-11-18 14:07:44 · 17796 阅读 · 54 评论 -
在windows上用vscode+cmake+mingw开发c++
用vscode适合写一些比较短小的程序,开发大型工程还是用IDE比较好。配置流程如下:一、安装mingw64在C盘新建一个没有空格出现的文件夹,例如“C:\mingw-w64”;在https://sourceforge.net/projects/mingw-w64/files/中选择所需的版本,例如“x86_64-win32-seh”,下载到“C:\mingw-w64”中...原创 2019-09-03 13:59:30 · 6728 阅读 · 1 评论