C、C++
文章平均质量分 70
C和C++学习笔记。
早睡的叶子
码农,计算机爱好者。
展开
-
c++的constexpr和constvalue的区别
constexpr可以用于变量和函数,函数可以在编译时或运行时求值。consteval只能用于函数,并且强制要求函数必须在编译时求值,不能在运行时调用。这两个关键字提供了不同的常量表达式处理机制,允许程序员在不同的场景下进行选择,以提高代码的效率和安全性。原创 2024-07-10 22:46:37 · 245 阅读 · 0 评论 -
c++: 理解编译器在背后所做的工作-工具篇
理解C++模板以及编译器的优化是深入掌握C++编程的重要部分。有一些其他工具和技术可以帮助你更好地理解编译器在背后所做的工作,特别是优化方面。原创 2024-06-25 22:58:32 · 958 阅读 · 1 评论 -
CppInsights: 学习C++模版的神器
CppInsights是一个开源的C++工具,旨在将高级C++代码转换为其等效的低级代码表示。它能够展示编译器在处理C++代码时的许多隐式操作,使得开发者能够更直观地理解代码的实际执行过程。该工具由Andreas Fertig开发,其目标是揭示C++代码的内在机制,帮助开发者深入理解语言的特性。原创 2024-06-25 22:52:38 · 1114 阅读 · 0 评论 -
c++处理string类型的工具和常用方法总结
这些头文件和示例展示了如何在C++中处理字符串和字符的不同方法。根据具体需求选择合适的头文件和函数可以大大提高程序的效率和可读性。通过使用这些正则表达式工具,可以在C++中方便地进行字符串模式匹配和替换操作。头文件来进行正则表达式匹配和处理字符串。在C++中,可以使用标准库中的。原创 2024-06-08 11:00:22 · 489 阅读 · 0 评论 -
C++格式化输出开源库fmt入手教程
格式API在精神上与C print函数家族相似,但比通用标准库实现更安全、更简单且速度快好几倍。格式字符串语法类似于Python中str.form使用的语法。如果不是c++ 20,还想要简化字符串的格式化,和输入输出流的简化。那就可以使用我们今天要介绍的开源项目,fmt,原创 2024-04-13 00:23:38 · 1416 阅读 · 0 评论 -
c++命令行解析开源库cxxopts上手教程
具体规则请看代码注释,总体来说还是比较通俗易懂的,不需要特别多的解释。// 1. 导入头文件(只有一个)// 2. 创建一个Options实例// 3. 写入可解析的参数("d,debug", "Enable debugging") // 默认是bool类型("i,integer", "Int param", cxxopts::value<int>()) // 该参数是int类型// vector 传递参数有 2 种方式// --value_list=1,2,3,4 一次性传递,确保没有空格。原创 2024-04-12 23:53:06 · 1336 阅读 · 2 评论 -
flatbuffer使用教程
Flatbuffer定义scheme的规则和使用例子代码原创 2023-12-16 21:35:05 · 2218 阅读 · 0 评论 -
C++执行系统命令的三种方式
函数的返回值为命令的退出状态。如果命令执行成功,则返回值为 0。如果命令执行失败,则返回值为非 0 值。函数会创建一个管道,用于将命令的输入和输出与 C++ 程序进行连接。函数提供了更大的灵活性,可以控制命令的输入和输出。函数提供了最强大的控制,可以直接控制子进程的执行。函数是最简单的方法,但它不是很灵活。函数从管道中读取命令的输出,使用。命令,并将命令的输出写入到文件。函数会在子进程中执行指定的程序。参数指定管道的模式,可以为。函数向管道中写入命令的输入。参数指定要执行的命令。参数指定要执行的命令。原创 2023-12-15 21:11:54 · 2253 阅读 · 0 评论 -
cmake设置C++编译器警告方法以及编译器警告详细介绍
C++编译器警告设置方法原创 2023-12-03 21:02:10 · 2298 阅读 · 0 评论 -
Cmkae外部依赖管理
cmake如何使用CPM和git submodule进行依赖管理原创 2023-12-03 20:47:29 · 594 阅读 · 0 评论 -
pybind11教程
pybind11的详细介绍和cmake使用例子原创 2023-12-03 20:20:06 · 1046 阅读 · 0 评论 -
C++代码质量提升指南-工具篇
如何提升C++代码质量?5种提升C++代码质量的方法C++代码质量提升指南提高C++代码质量的10个技巧C++代码质量优化原创 2023-07-30 14:59:20 · 549 阅读 · 0 评论 -
C++代码格式化工具clang-format详细介绍
pre-commit:帮助你提高代码质量的工具pre-commit是一个帮助开发人员提高代码质量的工具。它通过在提交代码之前运行一系列检查来实现这一点。这些检查可以包括格式检查、静态分析和 linting。pre-commit可以帮助你发现并修复代码中的错误,从而提高代码的质量和可维护性。它还可以帮助你遵循代码风格指南,并确保你的代码符合特定的标准。pre-commit会在你提交代码之前运行你指定的检查。如果检查发现任何错误,它会阻止你提交代码。你需要修复错误后才能提交代码。原创 2023-07-30 01:02:56 · 1476 阅读 · 0 评论 -
开发集成工具pre-commit详解介绍
pre-commit:帮助你提高代码质量的工具pre-commit是一个帮助开发人员提高代码质量的工具。它通过在提交代码之前运行一系列检查来实现这一点。这些检查可以包括格式检查、静态分析和 linting。pre-commit可以帮助你发现并修复代码中的错误,从而提高代码的质量和可维护性。它还可以帮助你遵循代码风格指南,并确保你的代码符合特定的标准。pre-commit会在你提交代码之前运行你指定的检查。如果检查发现任何错误,它会阻止你提交代码。你需要修复错误后才能提交代码。原创 2023-07-30 00:45:35 · 2418 阅读 · 0 评论 -
c++静态代码扫描工具clang-tidy详细介绍
Clang-Tidy是一个由LLVM项目提供的开源工具,是一个静态分析工具,用于进行静态代码分析和代码质量改进。它利用Clang编译器的强大功能,对C++代码进行静态分析,并提供了一系列的代码改进建议和警告。Clang-Tidy是基于Clang的AST(抽象语法树)进行分析,并能检测出许多常见的编码错误和代码风格问题。包括语法错误、逻辑错误、性能问题和风格问题。Clang-tidy是一种强大的源代码自动检查与修复工具,它能够帮助开发人员发现并修复代码中的各种问题。原创 2023-07-29 23:35:57 · 9318 阅读 · 1 评论 -
c++ 可变参数的三种实现方式
一个可变参数模板(variadic template)就是一个接受可变数目参数的模板函数或模板类。存在两种参数包:模板参数包(template parameter packet),表示零个或多个模板参数;说到这里,ubuntu(linux) 默认栈大小8M(使用命令 ulimit -a查看), Win下,Visual Studio 默认栈大小1M(连接器->系统)。函数参数为参数包的形式,使用递归展开。从本质上讲,逗号的作用是将一系列运算按顺序执行。整个逗号表达式的值为系列中最后一个表达式的值。原创 2023-01-13 23:07:19 · 7513 阅读 · 2 评论 -
C++数据类型转化使用方法,static_cast,dynamic_cast,dynamic_pointer_cast,dynamic_pointer_cast等
C++数据类型转化使用方法,static_cast,dynamic_cast,dynamic_pointer_cast,dynamic_pointer_cast等原创 2022-12-19 14:10:32 · 3342 阅读 · 0 评论 -
glog从下载到使用实录
Glog的安装和使用原创 2022-09-04 15:04:59 · 902 阅读 · 0 评论 -
c++的priority_queue各种使用方法
一般如果使用指针的话,就需要使用函数对象了。template原创 2022-07-20 22:40:17 · 6627 阅读 · 2 评论 -
cmake常用命令分类备忘
cmake常用命令备忘原创 2022-06-20 21:35:25 · 393 阅读 · 0 评论 -
AddressSanitizer原理解析
AddressSanitizer的原理解析原创 2022-06-05 23:16:55 · 1284 阅读 · 1 评论 -
深度学习编译器研究报告
近十年来,基于神经网络的深度学习技术将图像分类、语音识别和目标检测等技术的准确率提高到了实用的水平。众多的科技巨头和初创公司都卷入其中,努力挖掘各种可能的应用落地场景。深度学习技术已经走进并开始影响人们的生活。移动终端、嵌入式系统、单片机以及各种 AI 加速器都是深度学习应用落地的重要硬件平台,不同平台通常有不同的功能和特性,要在不同类型的设备上都获得最佳性能非常困难,因为需要基于硬件对模型与运算核心同时进行优化才能充分发挥硬件的性能。所以在现阶段为各种计算平台和加速器研发配套的软件工具来实现模型的高性能部翻译 2022-05-30 23:41:52 · 1406 阅读 · 1 评论 -
c/c++全排列和组合的写法
全排列和组合本质都是DFS(Deapth First Search) 算法的思想。目标输出1-3的全排列和组合.输出结果:程序#include <iostream>using namespace std;// 组合void dfs(int step, int goal, int cnt);// 排列void dfs(int goal, int step);void dfs2(int step, int goal, int cnt);int arr[100原创 2022-05-24 21:32:13 · 261 阅读 · 0 评论 -
如何保证代码的健壮性和可读性
可读性编码规范Goole编码规范中文版安全编码规范使用安全函数待补充框架规范满足:独立性里氏替换开闭原则依赖倒转接口隔离迪米特法则该使用设计模式的时候,就使用设计模式。系统CI系统门禁文化...原创 2022-05-16 21:02:01 · 442 阅读 · 0 评论 -
c++开源项目nlohmann/json快速上手
文章目录一、nlohmann/json1、简介2、代码下载3、代码编译4. 简单使用4.1 简单使用4.2 序列化文件IO一、nlohmann/json1、简介1、类似python调用json库一样, 非常的方便和直观。 绑定STL。2、内存占用优化和运行速度并不是非常关心。那里有无数的JSON库,每个库甚至都有其存在的理由。我们有这些设计目标:直观的语法。 在 Python 等语言中,JSON 感觉就像是一流的数据类型。我们使用了现代 C++ 的所有运算符魔术来在您的代码中实现相同的感觉。原创 2022-05-11 23:15:08 · 11055 阅读 · 0 评论 -
c++实现字符串split功能
文章目录c++实现字符串split功能1、原理2、代码3、substr介绍4、string的find函数简介c++实现字符串split功能1、原理简单C++ 的string函数的find功能和substr功能2、代码#include<string>#include<iostream>#include<vector>using namespace std;vector<string> repalce(string str, string原创 2022-04-17 22:28:06 · 1000 阅读 · 0 评论 -
segmentation fault (core dumped)
概述Segmentation fault (core dumped)多为内存不当操作造成。空指针、野指针的读写操作,数组越界访问,破坏常量等。对每个指针声明后进行初始化为NULL是避免这个问题的好办法。排除此问题的最好办法则是调试。由于使用错误的下标,导致数组访问越界使用strcpy, strcat, sprintf, strcmp, strcasecmp等字符串操作函数,将目标字符串读/写爆。应该使用strncpy, strlcpy, strncat, strlcat, snprintf, str原创 2022-03-27 00:23:47 · 7981 阅读 · 0 评论 -
cmake指定c++11标准
cmake 版本大于3.1set (CMAKE_CXX_STANDARD 11)cmake 版本小于3.1macro(use_cxx11) if (CMAKE_VERSION VERSION_LESS "3.1") if (CMAKE_CXX_COMPILER_ID STREQUAL "GNU") set (CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=gnu++11") endif () else () set (CM原创 2022-03-25 23:32:52 · 3783 阅读 · 0 评论 -
c++线程thread教程
c++线程threadC++11/C++14 线程教程thread类官网详解 thread类官网详解参考链接文章目录c++线程thread1.创建线程2.守护线程3. 可调用对象4. 传参5. 线程的移动和复制6.线程id7. 互斥mutex1.创建线程直接初始话thread类对象进行创建线程,创建线程后调用join()方法,让主线程等待子线程完成工程。#include <iostream>#include <thread>void thread_func原创 2022-03-16 18:04:41 · 5514 阅读 · 0 评论 -
cmake undefined reference to `pthread_create‘
Linux下使用thread库进行多进程开发的时候发现了报错。ubuntu@VM-4-7-ubuntu:~/cpp_thread$ g++ main.cpp /usr/bin/ld: /tmp/cc4vQLGs.o: in function `std::thread::thread<void (&)(int), int&, void>(void (&)(int), int&)':main.cpp:(.text._ZNSt6threadC2IRFviEJRiE原创 2022-03-16 16:20:53 · 3653 阅读 · 1 评论 -
cstdint和stdint.h的区别
概述:包括cstdint导入STD命名空间中的符号名,并且可能在全局命名空间中。包括stdint.h导入全局命名空间中的符号名,可能在STD命名空间中。C+标准库中还提供了C标准库的特性,作为一种通用的命名约定,C标准库中的相应名称预先由c+提供。区别:cstdint是C++ 11的头文件,stdint.h是C99的头文件(C和C++是不同的语言!)MSVC 2008既不包含stdint.h也不包含cstdint。cstdint的实现大多只是#include <stdint.h&g.原创 2022-01-14 01:02:19 · 4863 阅读 · 0 评论 -
cmkae集成spdlog和json,其他项目同理
概述需要开发一款工具,要使用的到json的解析和一个良好的日志系统。寻找新的开源库我选择了 https://www.libhunt.com/网站,找到了三方库。日志: sqdlogjson: json导入模式选择了git的submodule。[submodule "lib/spdlog"] path = lib/spdlog url = https://github.com/gabime/spdlog.git[submodule "lib/json"] path = lib/jso原创 2022-01-13 11:46:38 · 1470 阅读 · 0 评论 -
c/c++获取当前代码运行的路径
mac和Linux的方法是一样的,但是和windows有差异,如果要写出既可以在windows运行,又可以在Linux运行的代码,则需要增加代码宏控设置,判断不同的平台使用不同的代码,可以参考这篇文章:c/c++判断当前操作系统类型mac、Linux#include "iostream"#include <unistd.h>using namespace std;int main(int argc, char** argv){ const int MAXPATH=250;原创 2022-01-12 00:09:12 · 5530 阅读 · 0 评论 -
c/c++判断当前操作系统类型
以下方式针对c 和 c++ 均有效。windows检查是否定义了宏: __WIN32__ 如果定义了则是Linux,否则不是。mac检查是否定义了宏: __APPLE__ 如果定义了则是Linux,否则不是。linux检查是否定义了宏: __linux__ 如果定义了则是Linux,否则不是。 #ifdef _WIN32 std::cout << "Windows\n"; #elif __linux__ std::cout << "L原创 2022-01-11 23:48:10 · 6457 阅读 · 5 评论 -
visual stdio使用spdlog教程
这个文档的初衷是我想使用spdlog这个开源库,发现需要cmake编译成库文件使用,我就记录一下visual studio 下的配置过程,并写了测试程序,将代码会传送到GitHub方便后续自己查看学习。也方便读者进行阅读。spdlog项目地址https://github.com/gabime/spdlog本文档将开源项目编译成库文件加载库文件使用开源项目开始干活visual studio and cmake第一步:下代码git clone https://github.co原创 2021-10-20 23:21:45 · 3924 阅读 · 3 评论 -
代码备忘录
\1. 语法备忘录1.1 数组数组初始化java// 静态初始化int[] a = {1,2,3,4,5}// 动态初始化int[] b = new int[10];for (int i = 0; i < b.length; i++) { b[i] = i;} new int[]{i, j};pythoncc++数组长度 java int[] a = {1,2,3,4,5}; int length = a.length;c++原创 2021-08-22 12:54:58 · 207 阅读 · 0 评论 -
conan+cmake 使用libpng库开发
构建环境随时可以在底部看到conan的配置文件 [requires]libpng/1.6.37@bincrafters/stable[generators]cmake[options]*:shared=True[imports]bin, *.dll -> ./binlib, *.dylib* -> ./bincmake 的配置文件cmake_minimum_required(VERSION 3.0.0)project(cdsConan VERSIO原创 2021-07-26 23:02:06 · 627 阅读 · 4 评论 -
c/c++的彩色控制台输出方法
c/c++控制台彩色打印原创 2021-07-26 21:45:09 · 2186 阅读 · 2 评论 -
visual studio使用技巧
文章目录1. 插件安装2. debug技巧条件断点断点回退运行到光标所在行查看调用堆栈内存监控SDL检测- 非安全函数不给用1. 插件安装在菜单栏找到插件管理下载markdown插件下载后关闭visual stdio会出现安装视图。等待安装结束2. debug技巧官网教程:vs debug条件断点鼠标右键断点,可以给断点设置停下来的条件。断点回退鼠标左键长按后可以上下拖拽,让函数运行在某行。运行到光标所在行查看调用堆栈调用堆栈”窗口显示方法和函数被调用的顺序。 最原创 2021-06-05 11:34:29 · 495 阅读 · 0 评论 -
C语言中的sizeof和strlen的区别
sizeof / strelen先说结论,喜欢授之以渔的可以看后面结束。1. 不同点sizeof 是单目运算符,strlen 是函数。sizeof 返回是 字串/字符所在变量,实际占用的内存大小。单位是字节。包含字串结尾的'/0'strlen 返回的是 字串/字符实际占用的大小,单位是字节,不包含字串结尾的'\02. 相似点sizeof and strlen 都包含在头问价<string.h> 文件中都用来计算字符占用空间大小。实例说明理论是抽象的,我们来看一下实际代原创 2021-05-22 22:09:55 · 771 阅读 · 1 评论