C++知识
VS,路在脚下
专注与机器视觉算法与系统集成研发!
展开
-
虚函数 vs 纯虚函数
虚函数 vs 纯虚函数,如何选用?原创 2022-06-15 21:52:17 · 102 阅读 · 0 评论 -
C++---函数指针理解
1、函数指针顾名思义,指向函数的指针。所以函数指针其实是指针变量,只不过该指针变量指向函数。即函数指针指向的是程序代码存储区。2、格式类型名 (*指针变量名) (函数参数列表)3、用途(1)调用函数,即回调函数的使用;(2)函数的参数;4、声明声明指向函数的指针时,必须指定指针指向的函数类型,即指定函数的返回类型以及函数的参数列表。typedef int (*func_ptr)(int,int); // 声明一个指向同样参数、返回值的函数指针变量---指针变量为fun_ptr5原创 2021-10-05 16:06:13 · 197 阅读 · 0 评论 -
C++---头文件的包含思考
头文件包含的思考:1、包含顺序上不要成闭合的环状结构;2、结构顺序最好是树形包含结构;原创 2021-10-05 11:08:16 · 86 阅读 · 0 评论 -
C++---根据程序名称杀死进程
int killRunningProcess(const QString& _processName){ //1、根据进程名称找到PID HANDLE hProcessSnap; PROCESSENTRY32 pe32; hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); if (hProcessSnap == INVALID_HANDLE_VALUE) { return -1; } pe32.dwSi原创 2021-08-10 19:57:24 · 1195 阅读 · 0 评论 -
C++---临界区的使用
临界区每个线程中访问临界资源的那段程序称为临界区(Critical Section)(临界资源是一次仅允许一个线程使用的共享资源)。每次只准许一个线程进入临界区,进入后不允许其他线程进入。不论是硬件临界资源,还是软件临界资源,多个线程必须互斥地对它进行访问。它只能同步一个进程中的线程,不能跨进程同步。一般用它来做单个进程内的代码快同步,效率比较高。(互斥锁:用于保护临界区,确保同一时间只有一个线程访问数据。对共享资源的访问,先对互斥量进行加锁,如果互斥量已经上锁,调用线程会阻塞,直到互斥量被解锁。在完原创 2021-07-04 21:05:59 · 2254 阅读 · 0 评论 -
VS---#define编译宏
__DATE__ EXE编译时间;NDEBUG Debug模式原创 2020-04-28 16:45:06 · 559 阅读 · 0 评论 -
C++ ---try{}catch{...}
try{int *p = NULL;*p = 12;}catch (...){AfxMessageBox("ERROR");}如果想在,VS下异常被捕捉到,必须进行如下设置,如果不设置,则异常捕捉会被编译器优化掉,而无效。在编译命令行中加入 / EHa 的参数。设置如下:原创 2017-12-26 15:12:16 · 1840 阅读 · 0 评论 -
C++--读写文件时,对于异常断电或程序异常中止导致文件出错、损坏的解决方案
1.在读写文件时,增加异常捕捉语句,保证几十捕捉到异常,并快速flush()文件的写入;2.在读写之前,做好当前文件的备份操作,如果异常,则可以回复备份文件;原创 2021-06-21 18:16:24 · 1759 阅读 · 2 评论 -
C++---构造函数,拷贝构造函数,赋值函数
一个C++的空类,编译器会加入哪些默认的成员函数·默认构造函数和拷贝构造函数·析构函数·赋值函数(赋值运算符)·取值函数**即使程序没定义任何成员,编译器也会插入以上的函数!...原创 2021-06-12 10:44:17 · 182 阅读 · 0 评论 -
C++---STL之find,find_if函数
STL的find,find_if函数提供了一种对数组、STL容器进行查找的方法。#include <algorithm>原创 2021-06-12 10:07:44 · 853 阅读 · 0 评论 -
C++---条件编译
目录常见的预处理指令(1)#ifdef、#ifndef、#endif(2) #if、#elif、#else、#endif常见的预处理指令#include包含一个源代码文件#define定义宏#undef取消已定义的宏#if如果给定条件为真,则编译下面代码#ifdef如果宏已经定义,则编译下面代码#ifndef如果宏没有定义,则编译下面代码#elif如果前面的#if给定条件不为真,当前条件为真,则编译下面代码#endif结束一个#if……#else条件编译块#err.原创 2021-04-21 17:26:35 · 428 阅读 · 0 评论 -
C++--Google编程规范之C++
https://zh-google-styleguide.readthedocs.io/en/latest/contents/原创 2021-04-03 17:19:25 · 196 阅读 · 0 评论 -
C++---前置声明
前置声明应用对象:类、结构体解决的问题:(1)降低编译依赖,提高编译速度;(2)解决类的互相引用问题;(3)降低模块的耦合。可以隐藏类的实现,对隐藏的类进行修改时,不需要重新编译原类;使用说明:使用前置声明只允许的声明是指针或引用。一个原因是声明只要没有执行需要知道声明类的大小或者成员的操作。...原创 2021-04-03 16:03:06 · 152 阅读 · 0 评论 -
C++---编译时间
获取EXE编译时间及相关信息:__LINE__//行号__FILE__//文件名__DATE__//日期__TIME__//打印时间参考:https://docs.microsoft.com/en-us/cpp/preprocessor/predefined-macros?redirectedfrom=MSDN&view=msvc-160原创 2021-01-11 18:24:26 · 390 阅读 · 0 评论 -
C++---ShellExecute
HINSTANCE ShellExecute( _In_opt_ HWND hwnd, _In_opt_ LPCTSTR lpOperation, _In_ LPCTSTR lpFile, _In_opt_ LPCTSTR lpParameters, _In_opt_ LPCTSTR lpDirectory, _In_ INT nShowCmd);功能是运行一个外部程序,或者打开一个已注册的文件、打开一个目录、打印文件等等.原创 2020-12-31 14:11:41 · 879 阅读 · 1 评论 -
C++---函数参数的内存开辟
参数类型:形参:函数名后括号中的变量;实参:真实传给函数的参数,可以是:常量、变量、表达式、函数等。无论实参是何种类型,调用时,它们必须有确定的值,以便把这些值传送给形参。调用前:形参:由于函数没有调用,编译系统没有给函数的形参分配实际内存空间,因此没有实际的参数值。调用时:形参:实际调用时,系统会给函数的各形参分配存储空间,同时将实参的值依次传递给各形参,调用结束后,系统释放形参所占用的存储单元。...原创 2020-12-11 17:09:05 · 664 阅读 · 0 评论 -
C++---退出进程
强制退出:前提,先释放所有的内存数据。exit(1);//退出当前进程,其创建的所有线程也会随之退出。区别如下;exit(0):正常退出程序;exit(1):非正常退出程序;return:语言级别,表示调用堆栈的返回;exit是系统调用级别的,表示一个进程的退出。...原创 2020-12-10 17:04:17 · 7366 阅读 · 0 评论 -
C++----代码优化的一些技巧
1. 牢记Ahmdal定律让频繁调用的代码运行得更加高效,而让较少调用的代码保持运行正确;2. 先有正确的代码,然后再做优化优化那些你所知道的将被频繁调用的函数是一个很好的做法;3. 那些我认识的能够写出非常高效的代码的人说,他们花费在优化代码上的时间是他们写代码时间的至少两倍以上;4. 跳转/分支语句是昂贵的,不管何时尽可能的减少使用if...else if...else if...else if...语句链需要大量的跳转才能结束。如果可能,改为switch语句,有时...原创 2020-12-08 20:30:35 · 359 阅读 · 0 评论 -
C++----指针也是一种变量
关于指针传递以及内存拷贝的新知:指针也是一种变量。 MStruct *pS1 = new MStruct; MStruct *pS2 = new MStruct; MStruct *pS3 = new MStruct; //传地址,共享内存数据 pS1 = pS2;//传地址,共享内存数据,一个地方修改数据,全部更改。 //传值,独立内存数据 pS1->a = pS2->a; pS1->b = pS2->b; *pS3 .原创 2020-12-08 20:06:35 · 139 阅读 · 0 评论 -
C++---std::mutex
概念说明:std::mutex互斥量或锁,是一个用于保护共享数据不会同时被多个线程访问的类;互斥量或锁:是用来保护共享资源(变量或者代码)不被并发访问的一种方法,它只是方法,实际的实现就是std::mutex等类;使用说明:1.手动操作锁:#include <mutex>std::mutex mutex;//必须是全局的变量void MutexTest() { //在数据访问前,加锁 mutex.lock(); //do something ..原创 2020-11-26 11:16:56 · 528 阅读 · 1 评论 -
C++---Windows下事件Event的线程同步
场合:用于多线程中。1.函数:(1)创建事件HANDLE CreateEvent( LPSECURITY_ATTRIBUTES lpEventAttributes,// 安全属性,可以为NULL BOOL bManualReset,// 复位方式: BOOL bInitialState,// 初始状态:FALSE为无信号,TRUE为有信号; LPCTSTR lpName // 事件对象名称);复位方式说明:TRUE:手原创 2020-11-26 10:53:29 · 395 阅读 · 0 评论 -
C++---野指针内存判断
头文件:#include<windows.h>1.判断类或是函数指针输入:指针;BOOL IsBadCodePtr( FARPROC lpfn );返回值:fasle---内存地址可用,true---不可用;2.判断内存块指针输入:指针,内存大小,多用于结构体内存;BOOL IsBadReadPtr( const VOID *lp, UINT_PTR ucb );返回值:fasle---内存地址可用,true---不可用;...原创 2020-07-03 09:11:24 · 2732 阅读 · 0 评论 -
CSV---逗号分隔符
所谓“CSV”,是Comma Separated Value(逗号分隔值)的英文缩写,通常都是纯文本文件。通常CSV文件开头是不留空的,以行为单位,每行记录多项数据,每项数据用逗号 来分隔(标准英文逗号)。如用记事本写下:name_1, num_1, file_1name_2, num_1, file_2name_3, num_3, file_3保存为.csv 用exc...原创 2020-04-30 15:08:15 · 2761 阅读 · 0 评论 -
C++---string
定义于头文件 <string>成员函数:empty检查字符串是否为空sizelength返回字符数clear清除内容push_back后附字符到结尾append后附字符到结尾compare比较二个字符串replace替换字符串的指定部分find于字符串中寻找字符数值转换stoistolstoll (C++11)(C++1...原创 2020-04-30 15:06:34 · 116 阅读 · 0 评论 -
VS中C++解决方案中多个项目文件的引用
VS中C++解决方案中多个项目文件的引用原创 2019-12-10 15:05:03 · 4306 阅读 · 0 评论 -
C++Lambda表达式,自解
自己对Lambda表达式的浅显理解,只求暂时会用。格式:[caputrue](params)opt->ret{body;};[函数对象参数] (操作符重载函数参数) mutable 或 exception 声明 -> 返回值类型 {函数体}说明:返回函数指针。1.[函数对象参数]必须。即用来捕获所在作用域内外部定义的已知变量(可以是局部变量,也可以是成员变量),用来...原创 2019-12-07 10:28:08 · 193 阅读 · 0 评论