
C++
Vis_Stu
=.=
展开
-
Linux下CMake安装
前言因为博主现有机器上yum自动安装提供的CMake版本太低,无法编译对应的项目工程,因此博主打算安装一个最新版本的CMake。Linux下安装CMakeCMake的安装包可以直接从官网下载然后远程上传到对应linux机器上,如果不支持大文件传输的话也可以直接使用wget命令获取。鼠标放置于超链接上可以在左下角看到对应地址(或者直接右键复制链接地址wget https://github.com/Kitware/CMake/releases/download/v3.19.3/cmak原创 2021-01-28 23:17:09 · 1536 阅读 · 0 评论 -
c++11 std::thread多线程简单模型
c++11 std::thread的使用介绍(带简单模型的代码参考)原创 2020-09-15 21:43:33 · 847 阅读 · 0 评论 -
编译器对你的c++代码做了什么?
在编写代码的时候,可能会考虑性能方面的优化,但实际编译器已经帮你做了一部分优化。原创 2020-08-27 12:15:23 · 437 阅读 · 0 评论 -
c++ memset与崩溃
c++中提供了函数memset,主要用于一段内存内容的初始化(基于字节为单位)。参数1为进行初始化的内存首地址,参数2为初始化的值(虽然是个int但实际只能用0~255,因为是按字节初始化),参数3为初始化的内存大小(字节为单位)。比较常见的用法类似于下例:class TempClass {public: TempClass() { memset(this, 0, sizeof(*this); }; // ... private: char name_[20]; int valu原创 2020-05-26 23:32:53 · 1622 阅读 · 0 评论 -
linux下的c++编译
Linux下的c++编译关于GCC使用g++编译cpp文件功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入关于GCC...原创 2020-04-01 00:39:43 · 922 阅读 · 0 评论 -
c++ 临时变量与动态分配效率测试
在C++中较常接触的内存对象一般都存储于两种空间中:1.栈(临时变量)2.堆(动态分配 new / malloc)临时变量的内存分配在程序编译的时候已经预设好了,而动态分配的内存则要等到程序实际运行时跟系统进行申请的,效率肯定比前者要低。具体细节可以查阅这位博主的博客分析栈为什么效率比堆高本文中想要测试的是栈比堆具体快多少,在实际工程应用中,应该如何取舍。测试用例:#i...原创 2019-10-14 10:53:22 · 559 阅读 · 0 评论 -
C++ 宏定义与条件编译
C++中偶尔可以看见一些宏定义,例如__LINE__,或者__FILE__,还有##这些符号。其中__LINE__ , __FILE__是属于编译器里面内置的宏,通过这几个宏可以获取到源码对应的行号,对应的文件名等等。而##符号用于宏定义中,具有连接两个参数,使其成为一个参数名的作用。#符号在宏定义中,是将之后的参数转换为字符串的作用。具体用法如下所示:#include <stdio.h&g...原创 2018-07-05 12:29:06 · 1120 阅读 · 0 评论 -
STL容器 内存释放
在一个项目中,需要在服务端保存玩家的录像回放数据,采用vector/map容器暂存了下发的消息数据,等待游戏结束后就将其写入文件,然后用clear清除掉这块缓存。游戏上线了之后,发现其占用的内存一直上升,搜寻日志后发现,每局结束后回放占用的空间并没有释放掉,随着房间一直保留。也就是假设一共1000个房间,每个房间都有玩家游戏过后,就会有一千份回放空间没释放。瞬 · 间 · 爆 · 炸普...原创 2018-05-31 12:16:06 · 3165 阅读 · 0 评论 -
虚函数-实现
C++中虚函数表是专门存在一个位置上的,而在实例的首地址存储的即为虚函数表的地址。所以如果类A拥有虚函数(一个或者多个),其实例的大小都会多增加4个字节,用于存储虚函数表地址。如果类B不存在虚函数,则其会按默认顺序存储成员变量的值。例如以下例子:#include <stdio.h>struct TestClass{ TestClass() { value = 10; }...原创 2018-04-12 22:44:49 · 641 阅读 · 0 评论 -
linux编译C++ 报错stray '\357' in program
在linux端编译so时,报了一个stray '\357' in program的错误。大概是两种可能:1.源文件中含有中文字符(注释不算)。2.源文件编码格式采用了UTF-8带BOM的格式。后来看了下的确是编码格式的问题,只要另存为其他编码格式重新编译即可。另外在windows端编译时并没有报错,可以编译通过。应该纯粹只是linux不接受UTF-8带BOM格式的编码。原创 2017-11-30 12:08:42 · 5291 阅读 · 0 评论 -
C++ 封装文件操作类
暂时封装一个文件输出类,平时要用的时候方便一些 #include <stdio.h>#include <string>using namespace std;class fileopr{ string m_filepath; FILE *m_pFile;public: fileopr() { m_filepath = "d:\\te...原创 2017-09-10 18:22:09 · 3627 阅读 · 0 评论 -
关于字符编码ANSI、UNICODE、UTF-8等
字符编码一般是导致文件乱码的主要原因。每次记不太清楚这些各种各样的字符编码名称,现在还是整理一下。主要查阅资料来自于:Ansi,UTF8,Unicode,ASCII编码的区别总的来说,字符编码主要分这两大类:1.ANSI2.UNICODE其他大部分字符编码都能归并到这两类里面,但不是同级的。总结下网上查到的资料,说说由来:ASCII:一开始,大家用的都是ASCI原创 2017-06-23 18:26:01 · 766 阅读 · 0 评论 -
C++两个项目之间相互引用的方法
实际工程中有时可能会遇到一个项目中使用了另一个项目中的函数,那么我们直接添加相关的引用即可。但是如果两个项目A,B之间相互引用,且A项目编译在B项目之前,直接相互引用就会导致混乱的发生。此时可以采用函数指针的方式,在A中声明函数指针,在B中为其赋值,这样A项目中使用该函数指针就可以调用B项目的函数了。(前提是把函数指针声明为静态全局变量,然后在B的初始化中赋值,否则可能会导致后续操作中原创 2016-12-19 18:22:37 · 8633 阅读 · 0 评论 -
C++ 两个类相互引用
实际工程中两个类相互引用的情况还是比较多的,其中大致分为两种:1.同一项目下相互引用。2.不同项目间相互引用。情况1:只需要相互包含头文件就行了,但是要避免重复包含,用#pragma once或者#ifndef都可以。如果你编译时仍然发现存在类或者变量常量未定义,请检查ifndef中的宏是否与其他冲突,或者#include包含头文件的顺序存在问题。编译器在编译代码时会先把c原创 2017-03-29 16:09:37 · 4014 阅读 · 0 评论 -
CString转char*/wchar_t* 转 char*
因为程序中需要把CString转为char*来使用,没想到转换的套路挺深所以也顺便记录一下。一般来说普通的情况只需要这样就能转换: CString strFilepath = _T("d:\\新建文件夹"); char *pFilepath = strFilepath.GetBuffer(0);CString自身就有提供方法进行转换。但是如果你的工程设置的是Unicode字符原创 2017-03-24 11:31:11 · 2455 阅读 · 0 评论 -
c/c++ 文件相关操作
打开文件(fopen函数):包含头文件即可。使用比较简单方便,两个参数前者代表文件路径,后者代表打开方式('r'代表可读,'w'代表可写,‘b’代表二进制形式打开,'+'代表读写权限均有,可组合使用)。如果打开失败,返回的文件指针为空。只要含有'r'标志的打开方式,都会检测文件是否存在,若不存在则打开失败。如果是以'w'标志打开,当文件不存在时则进行新建。当然还有ifstrea原创 2017-07-05 16:11:28 · 869 阅读 · 0 评论 -
子类虚函数调用无效
这种情况出现的比较少,从工作到现在将近一年时间就遇到两次。主要表现为子类重载了父类的虚函数后,使用正常方法(即父类指针指向子类对象后调用该虚函数),结果调用的仍为父类的函数。一开始以为是指针指向有问题,或者虚函数的声明名称写错了这种小问题,但是检查后都是正确的。更详细的情况:基于cad的二次开发,实际上述的子类是某个继承于AcDbEntity类的自定义构件,在cad打开情况下,绘制一个原创 2017-06-02 09:36:39 · 1785 阅读 · 0 评论 -
C++关键字 explicit
之前在项目中有看到过explicit关键字,不过不清楚是什么作用。网上大致查了一下。首先它仅限于描述构造函数,然后它的作用是避免隐式调用构造函数。什么时候会触发隐式调用呢?举个栗子://测试类Test class Test{public: Test() { m_iValueA = 0; m_iValueB = 0; } explic原创 2017-03-09 16:23:12 · 342 阅读 · 0 评论