c++
文章平均质量分 71
xujianjun229
基于.Net Framework技术平台的Winform软件开发(C++、C#)Web App开发(C#)、单片机应用开发类(C)、单片机软硬件设计类、基于STM32的嵌入式系统软件开发(C)
展开
-
CLion 实现远程调试
CLion 实现远程调试转载 2022-12-16 21:28:42 · 1928 阅读 · 0 评论 -
Ubuntu下安装MySQL 以及C++连接MySQL
一、简单分享Ubuntu 16.04下安装MySQL的过程。首先执行下面三条命令:sudo apt-get install mysql-server #此步骤可以省略,已经启用docker mysql服务容器sudo apt-get isntall mysql-client #必须安装,客户端远程连接mysql服务器的工具sudo apt-get install libmysqlclient-dev #c++开发mysql.h的依赖库连接到远程主机上的 MYSQLmysql -u原创 2021-12-14 21:35:20 · 3267 阅读 · 0 评论 -
cmake指定编译器以及32位、64位版本
概述本文演示环境: win10 + VS20171.指定变量值咱们常用命令【cmake ..】在build目录下配置生成项目和解决方案。 其实,这个命令还有其他用法。指定CMakeLists.txt中的变量值。比如 , fmt 库 的CMakeLists.txt中有一个变量 【BUILD_SHARED_LIBS】,可以在命令行指定其值:复制cmake -DBUILD_SHARED_LIBS=TRUE ..对比可知,多了中间指定变量的命令, 其他没有变化。2.指定编译器版本使用转载 2021-11-29 08:37:19 · 13978 阅读 · 2 评论 -
C++泛型编程之函数模板和类模板
本阶段主要针对C++泛型编程做详细讲解目录 本阶段主要针对C++泛型编程做详细讲解模板的概念一、函数模板1、函数模板语法2、函数模板注意事项3、函数模板案例4、普通函数与函数模板的区别5、普通函数与函数模板的调用规则6、模板的局限性二、类模板1、类模板语法2、类模板与函数模板区别3、类模板中成员函数创建时机4、类模板对象做函数参数5、类模板与继承6、类模板成员函数类外...原创 2021-11-11 22:42:50 · 218 阅读 · 0 评论 -
c++标准库异常以及编写自己的异常类的写法
一、c++标准库异常标准库中也提供了很多的异常类,它们是通过类继承组织起来的。标准异常被组织成八 个。 异常类继承层级结构图如下: 每个类所在的头文件在图下方标识出来。1、8个标准异常类的成员:① 在上述继承体系中,每个类都有提供了构造函数、复制构造函数、和赋值操作符重载。② logic_error 类及其子类、runtime_error 类及其子类,它们的构造函数是接受一个 string ...原创 2021-11-11 21:42:32 · 1290 阅读 · 0 评论 -
C++11六大函数(构造函数,移动构造函数,移动赋值操作符,复制构造函数,赋值操作符,析构函数)
前言:在C++中,有三大函数复制控制(复制构造函数,赋值操作符,析构函数),而在C++11中,加入了移动构造函数,移动赋值操作符。我就斗胆将他们命名为六大函数好了。一、构造函数c++primer中说过:构造函数是特殊的成员函数,只要创建类类型的新对象,都要执行构造函数。构造函数的工作就是保证每个对象的数据成员具有合适的初始值。构造函数与其他函数不同:构造函数和类同名,没有返回类型。构造函数与其他函数相同:构造函数也有形参表(可为void)和函数体。 (参数表为void的构造函数为默认构.转载 2021-10-08 20:06:42 · 1579 阅读 · 0 评论 -
C++11 move和forward
1、概念介绍最近刚好把它们俩梳理了一遍, 来写写move和forward为什么会出现, 他们能解决什么痛点.(1) 问题: 临时变量copy开销太大(2) 引入: rvalue, lvalue, rvalue reference概念(3) 方法: rvalue reference传临时变量, move语义避免copy(4) 优化: forward同时能处理rvalue/lvalue reference和const reference2、两个C++的基础背景2.1、..转载 2021-10-03 10:16:37 · 204 阅读 · 0 评论 -
C++11 deque用法总结(整理)
目录1、deque 简介1.1、deque的创建和初始化2、deque成员函数使用2.1、有关增加元素的函数方法2.2、有关删除元素的函数方法2.3、 iterator函数 - 遍历2.4、其他有关函数1、deque 简介deque容器为一个给定类型(可以是用户自定义类型)的元素进行线性处理,像向量一样,它能够快速地随机访问任一个元素,并且能够高效地插入和删除容器的尾部元素。但它又与vector不同,deque支持高效插入和删除容器的头部元素,因此也叫做双端队..转载 2021-10-02 19:31:37 · 1352 阅读 · 0 评论 -
C++ 函数模板使用实例
#include <iostream>using namespace std;//交换变量值函数模板template<class T>void swapTemp(T& a, T& b){ T tmp = a; a = b; b = tmp;}//打印数组元素模板template<class T>void printTemp(T array[], int num){ int i = 0; for (i = 0...原创 2021-10-02 18:39:44 · 259 阅读 · 0 评论 -
C++11的chrono库,可实现毫秒微秒级定时
概念介绍:C++11有了chrono库,可以很容易的实现定时功能。chrono库主要包含了三种类型:时间间隔Duration、时钟Clocks和时间点Time point。1、Duration: duration表示一段时间间隔,用来记录时间长度,可以表示几秒钟、几分钟或者几个小时的时间间隔,duration的原型是: template<class Rep, class Period = std::ratio<1>> clas...原创 2021-10-02 18:14:48 · 2390 阅读 · 0 评论 -
C++ std::function的用法
介绍类模版std::function是一种通用、多态的函数封装。std::function的实例可以对任何可以调用的目标实体进行存储、复制、和调用操作,这些目标实体包括普通函数、Lambda表达式、函数指针、以及其它函数对象等。std::function对象是对C++中现有的可调用实体的一种类型安全的包裹(我们知道像函数指针这类可调用实体,是类型不安全的)。通常std::function是一个函数对象类,它包装其它任意的函数对象,被包装的函数对象具有类型为T1, …,...原创 2021-10-02 15:29:35 · 1319 阅读 · 0 评论 -
C++ 重载运算符operator
概述运算符重载的实质是函数重载.运算符重载是通过创建运算符函数实现的。运算符函数定义的一般格式:<返回类型说明符> operator <运算符符号>(<参数表>)运算符函数重载一般有两种形式:重载为类的成员函数和重载为类的非成员函数(非成员函数通常是友元)。一、成员函数运算符重载 当运算符重载为类的成员函数时,成员函数用this指针隐式地访问了类的一个对象,因此函数的参数个数比原来的操作数要少一个(后置一元运算符重载除外)...转载 2021-10-02 14:16:51 · 624 阅读 · 0 评论 -
C++11可变模板参数的用法
#include <iostream> void tprintf(const char* format) // base function{ std::cout << format;} template<typename T, typename... Targs>void tprintf(const char* format, T value, Targs... Fargs) // recursive variadic functi...转载 2021-09-30 20:57:00 · 468 阅读 · 0 评论 -
win10下VSCode配置opencv4.5.2(64位应用程序)
一、前言 用vscode来写opencv代码需要自己编译OpenCV,主要用到MinGW-w64和CMake工具。由于可能存在的版本兼容问题,下载这些工具前最好先访问网站: https://github.com/huihut/OpenCV-MinGW-Build 该网站包含了已经编译过的Opencv库,不想自己编译的话可以直接下载(编译过程并不会一帆风顺,需要有折腾的精神)。 该网站还提供了现成的版本兼容信息,点开Configuration可以看到所对应的Min...原创 2021-09-11 18:28:10 · 1107 阅读 · 0 评论 -
内存泄漏检测工具vmmap使用指南
先上vmmap工具下载链接:链接:https://pan.baidu.com/s/1EqdKrVR-BXdGAmIOmYcWYw提取码:2af3一、什么是内存泄漏?内存泄漏是指程序分配内存,然后在不再需要时不将其归还。泄漏的内存被浪费了,因为程序本身不再使用它,但在程序退出之前没有其他东西可以使用它。高内存使用率并不总是意味着存在内存泄漏。如果您正在做的事情本身就需要大量内存,并且在操作完成后该内存被返还,那么这不是内存泄漏。内存泄漏通常是无界。如果你继续做一些触发泄漏的事情,那么...原创 2021-09-11 16:29:55 · 4178 阅读 · 0 评论 -
不同平台下对默认栈大小修改
一、前言:在应用程序我们经常需要定义大的数组,数组定义成局部变量非静态变量,那么数组就会在栈上分配,当数组超过默认栈的大小时,会引起非常内存访问。一般,在Unix-like平台,栈的大小不是由程序自己来控制的而是由环境变量来控制的,所以就不能通过设置编译器(像gcc)的任何编译标志来设置栈的大小;在windows平台下,栈的大小的信息是包含在可执行文件中的。它可以在Visual C++的编译过程中设置。也可以用Microsoft提供的一个...原创 2021-09-11 15:13:36 · 6320 阅读 · 1 评论 -
c++程序内存布局以及堆栈概念详解
前言:下图是c/c++的进程的内存分布布局图,搞清楚内存布局对于理解一个程序是非常重要的。 一个程序运行起来,操作系统会给每个进程分配一个 4G 的程序地址空间,当然这都是虚拟地址空间,因为如果一个进程分 4G 的内存,那么就算有再多的内存也不够分。 这些虚拟地址空间中的内存分段都是什么意思呢?下面进行讲解(linux系统为1G和3G,windows系统为2G和2G):一、首先进程地址空间的 1G(windows系统为2G) 内核空间是给操作系统使用的,我们用户是没有操作...转载 2021-09-11 14:24:18 · 1411 阅读 · 0 评论 -
c++ 智能指针 shared_ptr和unique_ptr
1、共享智能指针 shared_ptrshared_ptr使用计数机制来表明资源被几个指针共享。当我们调用release()时,当前指针会释放资源所有权,计数减1。当计数等于0时,资源会被释放 //共享智能指针有以下3种定义方式: std::shared_ptr<int> ptr1 = std::make_shared<int>();//C++11可以 std::shared_ptr<int> ptr1(new int);..原创 2021-09-09 12:06:53 · 369 阅读 · 0 评论 -
Windows系统下visual studio code使用cmake构建c++完整项目
目录一、开发环境搭建:二、代码项目实践三、可能出现以下问题及解决方案:一、开发环境搭建:cmake百度网盘链接:链接:https://pan.baidu.com/s/1CFQnlU4AwrqAYiMYyGHdmw提取码:ab7awindows 下的GCC编译器mingw64.zip下载:链接:https://pan.baidu.com/s/1I47MAENXtD-cqjZcqKI_Jw提取码:qbv91、下载以上2个工具,解压后,放到C:\...原创 2021-09-05 21:21:48 · 1563 阅读 · 1 评论 -
C++11 Lambda表达式
前言lambda表达式是C++11新特性之一,下面一起来看一下lambda表达式。先来看一个例子,假设有一个整数列表,我们希望统计一下其中有多少个整数可以被7整除。第一种方案,我们先采用普通函数的形式来实现。我们使用vector来存储数字,使用generate()来往vector中填充随机数。 这里介绍一下generate()的用法,该函数接受一个区间,由前两个参数指定,并将区间中的每个元素设置为第三个参数返回的值,如下:std::generate(v.begin(),v.end(),std::转载 2021-08-31 22:23:25 · 1204 阅读 · 0 评论 -
C++中的 左值引用(&) 和 右值引用(&&)
一、左值引用(&)简介 引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。 引用的声明方法:类型标识符 &引用名=目标变量名; 【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名 说明: (1)&在此不是求地址运算,而是起标识作用。 (2)类型标识符是指目标变量的类型。 (3)声明引用时,必须同时对其进行初始化。 (4)引用声明完毕后,相当于目标变量名有两个名称,即该转载 2021-08-31 21:39:08 · 5501 阅读 · 3 评论 -
对 imp_getaddrinfo 的未定义引用
使用visual studio code 调试HTTP协议时,编译时,报错:对 imp_getaddrinfo 的未定义引用?这是一个未解决的外部问题的经典案例。您尝试使用的功能是getaddrinfo.向下滚动到该文档链接到要求部分的底部。它告诉您需要 includeWs2tcpip.h来声明函数,而您已经这样做了。但它也告诉你需要使用Ws2_32.lib导入库来提供函数的定义。这一步是你错过的。因此,要解决您需要链接Ws2_32库的问题,请添加-lWs2_32到您的命令行选项中。在...原创 2021-08-31 20:20:21 · 498 阅读 · 0 评论 -
Visual Studio Code (vscode) 配置 C / C++ 环境
特别注意:所有路径目录以及文件名称,必须是英文1. 下载VScode2. 安装cpptools工具3. 下载MinGW4. 配置环境变量5. 使用简单的.cpp文件配置C++环境6. 运行 ➺➻➸ 详细解读:1. 下载VScode下载链接:https://code.visualstudio.com/Download安装过程:一路下一步,安装很简单,安装路径看个人2. 安装cpptools工具打开vscode,按照以下步骤安装3. 下载MinG...转载 2021-08-30 21:27:55 · 517 阅读 · 0 评论 -
c#调用c++带有回调函数方法的实现
在c++中有个回调函数指针的概念,只需要某个函数在调用定时器函数时传入一个函数指针就能达到目的,但C#中没有函数指针的概念,我们该怎样来实现呢。其实说到回调函数,大家应该能想到c#中的委托,虽然名字不一样,但在各自的语言范畴都能实现相似的功能。所以我们就可以大胆的尝试下,把c#中的委托传给c++,看c++是否能够承认它就是回调函数。首先用c++写一个带有回调函数的方法 Test,在此省略。接着,在c#中调用,如:[DllImport("Test.dll",ChartSet.Ansi,Entry转载 2021-08-19 20:28:01 · 1414 阅读 · 0 评论 -
利用typedef定义函数指针(回调函数)
利用typedef定义函数指针进入正文: 代码简化, 促进跨平台开发的目的. typedef 行为有点像 #define 宏,用其实际类型替代同义字。 不同点:typedef 在编译时被解释,因此让编译器来应付超越预处理器能力的文本替换。用法一:typedefint(*MYFUN)(int, int);这种用法一般用在给函数定义别名的时候上面的例子定义MYFUN是一个函数指针, 函数类型是带两个int 参数, 返回一个int在分析这种形式的定义的时候可以用下面的方法:...转载 2021-08-19 20:25:29 · 2769 阅读 · 0 评论 -
c++加载调用dll动态库的方法
c++有2种加载dll的方法:动态加载DLL和静态加载DLL1、动态加载DLL的步骤如下:void DynamicUse(){ HMODULE module = LoadLibrary(L"VideoNetClient.dll"); if (module == NULL) { printf("加载VideoNetClient.dll失败\n"); return; } typedef int(*AddFunc)(); // ...原创 2021-08-19 18:12:01 · 5087 阅读 · 0 评论 -
使用vs2019用c++创建dll库
1.创建dll项目新建项目,选择“动态链接库(DLL)”,接着点击下一步。然后配置新项目,项目名称我写的是“Dll3”,以及“将解决方案和项目放在同一目录中”那里打勾,接着点“创建”。注意记着位置,避免生成之后找不到2.更改我们的头文件和源文件上面创建完了之后,你会得到这样的头文件和源文件。里面的内容分别是(里面原先的内容不重要哈,扫一眼就好)接下来的就重要了首先我们改源文件里的“pch.h”将先前的“pch.h”里的内容删光光。换为我们需要的方程,这里用的...原创 2021-08-19 16:44:18 · 1588 阅读 · 0 评论 -
c++抽象基类和派生类
#ifndefSTUDENT_H#defineSTUDENT_H//抽象基类,不能用来定义对象或者说抽象类不能实例化,但是可以定义指向抽象类的数据的指针变量,当派生类中无纯虚函数,才成为具体类,就可以用这种指针指向派生类对象,然后通过指针调用虚函数,实现多态操作//最后注意变量命名规范#include<iostream>usingnamespacestd;classStudent{public:Student(int...原创 2021-08-01 23:30:56 · 1511 阅读 · 1 评论 -
C++ rapidjson 基础入门
此篇文章中对于rapidjson的使用方法基本上来源于rapidjson中文使用手册rapidjson的基本介绍、使用好处、解析速度等不在此篇讲述,因为在官网上已经讲得非常详细了,这里写的都是本人拙劣的见解,如有不足之处,烦请各位指出。本文结构:1、基本单元;2、构建3、增4、删5、查6、改7、输出8、拷贝9、总结1、基本单元rapidjson的基本操作单元:Document以及Value例:当有一个json案例,请让我们称之为te...转载 2021-07-08 21:51:14 · 847 阅读 · 0 评论