C++
文章平均质量分 68
damenhanter
这个作者很懒,什么都没留下…
展开
-
在 linux 下使用 CMake 构建应用程序
CMake 简介CMake 是一个跨平台的自动化建构系统,它使用一个名为 CMakeLists.txt 的文件来描述构建过程,可以产生标准的构建文件,如 Unix 的 Makefile 或Windows Visual C++ 的 projects/workspaces 。文件 CMakeLists.txt 需要手工编写,也可以通过编写脚本进行半自动的生成。CMake 提供了比 autoconf...转载 2018-09-07 12:52:25 · 296 阅读 · 0 评论 -
内存映射文件原理探索
一直都对内存映射文件这个概念很模糊,不知道它和虚拟内存有什么区别,而且映射这个词也很让人迷茫,今天终于搞清楚了。。。下面,我先解释一下我对映射这个词的理解,再区分一下几个容易混淆的概念,之后,什么是内存映射就很明朗了。 原理首先,“映射”这个词,就和数学课上说的“一一映射”是一个意思,就是建立一种一一对应关系,在这里主要是只 硬盘上文件 的位置与进程 逻辑地址空间 中一块大转载 2013-07-17 23:24:46 · 472 阅读 · 0 评论 -
A星寻路算法介绍
这篇文章还可以在这里找到 英语这篇blog是由iOS Tutorial Team的成员 Johann Fradj发表的,他目前是一位全职的资深iOS开发工程师。他是Hot Apps Factory的创始人,该公司开发了App Cooker。 学习A星寻路算法是如何工作的!你是否在做一款游戏的时候想创造一些怪兽或者游戏主角,让它们移动到特定的位置转载 2013-07-09 23:27:27 · 1051 阅读 · 0 评论 -
不调用库函数,实现strcpy函数
题目: 已知strcpy函数的原型是: char * strcpy(char * strDest,const char * strSrc); 1.不调用库函数,实现strcpy函数。 2.解释为什么要返回char *。 解说: 1.strcpy的实现代码 char * strcpy(char转载 2013-06-16 22:43:44 · 885 阅读 · 0 评论 -
windows 多线程 消息队列
Windows线程分为两种:Worker线程、GUI线程worker线程:是指完全不牵扯到图形用户界面(GUI),纯粹做运算的线程。GUI线程:负责建造窗口以及处理消息循环(拥有消息队列)。任何一个特定窗口的消息总是被产生这一窗口的线程抓到并处理(线程收到消息后派发给不同的窗口函数处理)。操作系统会监控计算机上的键盘和鼠标等输入设备,为每一个输入事件(由用户操作所引原创 2013-06-16 18:13:30 · 2159 阅读 · 0 评论 -
#pragma warning
在编写程序的时候,我们经常要用到#pragma指令来设定编译器的状态或者是指示编译器完成一些特定的动作。一 message参数。 它能够在编译信息输出窗口中输出相应的信息,这对于源代码信息的控制是非常重要的。其使用方法为: #pragma message("消息文本") 当编译器遇到这条指令时就在编译输出窗口中将消息文本打印出来。 当我们在转载 2013-06-11 19:40:43 · 2789 阅读 · 0 评论 -
c++强制类型转换:dynamic_cast、const_cast 、static_cast、reinterpret_cast
dynamic_cast: 运行时作检查,转换后是否成功。仅支持指针和引用,用于继承体系内。const_cast: 主要针对const和volatile的转换. static_cast: 编译器在编译期处理,无运行时检查,用于内置类型,或有联系的指针类型间转换。reinterpret_cast: 任何指针类型之间的转换。 1)static_cast(转载 2013-04-19 21:31:49 · 490 阅读 · 0 评论 -
C++中防止STL中迭代器失效__map/set等关联容器vector/list/deque等序列容器_如何防止迭代器失效_即erase()的使用
序列性容器::(vector和list和deque) erase迭代器不仅使所指向被删元素的迭代器失效,而且使被删元素之后的所有迭代器失效,所以不能使用erase(iter++)的方式,但是erase的返回值为下一个有效的迭代器。 所以正确方法为:: for( iter = c.begin(); iter != c.end(); )转载 2013-04-07 22:41:26 · 964 阅读 · 0 评论 -
堆栈溢出
Q:什么是堆栈溢出?堆栈溢出是什么意思?堆栈是一种计算机内存的管理方式,在计算机领域,堆栈是一个不容忽视的概念,但是很多人甚至是计算机专业的人也没有明确堆栈其实是两种数据结构。堆栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。要点:堆:顺序随意栈:后进先出(Last-In/First-Out) 。从物理上讲,堆栈是就是一段连续分配的内存空间。转载 2012-11-21 12:03:31 · 11685 阅读 · 1 评论 -
C++ RTTI
下面这篇文章虽然有点老,但对C++的RTTI基本原理讲的比较透彻。该文章摘自UMLCHINA网站,是台湾一个群体写的,我根据大家比较熟悉的方式,修改了一些名词的说法,如衍生(派生)等,让大家可以方便的阅读。C++的 RTTI 观念和用途物泽C++应用小组自从1993年Bjarne Stroustrup 〔注1 〕提出有关C++ 的RTTI功能之建议﹐以及C++的异常处理(exc转载 2012-11-07 09:49:56 · 501 阅读 · 0 评论 -
C++内存分配
内存泄露相信对C++程序员来说都不陌生。解决内存泄露的方案多种多样,大部分方案以追踪检测为主,这种方法实现起来容易,使用方便,也比较安全。 首先我们要确定这个模块的主要功能:能追踪内存的分配和释放过程。 要能显示内存分配的相关信息,比如内存块大小,代码所在文件所在行等。 在发现内存泄露时及时给出相关信息。 能正确处理一些异常情况,比如内存不足,对象初始化失败等等。 是线转载 2012-10-16 20:56:29 · 637 阅读 · 0 评论 -
C++虚函数表
一般来说,对于开发者我们只需要知道虚函数的使用方法,以及虚函数表的存在即可。但面试时往往会遇到更细节的问题,比如让你实现一个虚函数机制,虽然不太实用,总归了解些底层知识也是件好事。但如果有人苦苦相逼一定要拿这个刷人,你就去骂他吧,你才是写编译器的,你们全家都是写编译器的。唉,我有些失态了... 1. 虚函数与虚函数表基本知识这里有一篇介绍,只需看前两页,各种配图,很形象:h转载 2013-07-18 10:32:06 · 535 阅读 · 0 评论 -
GetOverlappedResult
BOOLWINAPIGetOverlappedResult( HANDLE hFile, LPOVERLAPPED lpOverlapped, LPDWORD lpNumberOfBytesTransferred, BOOL bWait )/*++Routine Description: The GetOver转载 2013-07-03 23:45:13 · 1654 阅读 · 0 评论 -
C++中CRT检测内存泄露
// 使用CRT调试API#include #include // 将所有的内存分配函数new替换成CRT提供的调试new//MFC的调试new 的参数是这样的://new(size_t nSize, LPCSTR lpszFileName, int nLine);//_CLIENT_BLOCK定义如下:#define _CLIENT_BLOCK 4转载 2014-02-12 10:11:54 · 661 阅读 · 0 评论 -
使用SIMD技术提高C++程序性能
今天和C++同行谈谈如何提高自己的身价。编程语言只是工具,要把工具用到最合适的地方,扬其长且避其短,打造出有价值的软件产品,那么使用这工具的人自然身价就高了。C++语言的优势C++语言有哪些优势呢?当然有很多,不然早消亡了。但泛泛地说“有很多”没意义。到底有哪些呢?不同人可能有不同的回答。同一个人在不同时间也可能回答不同。这里我们不妨听听C++之父Bjarne Stroustrup转载 2017-02-11 14:23:23 · 703 阅读 · 0 评论 -
每个 C 程序员都应知道的关于未定义行为的那点事(下篇)
译自:http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_21.html(可能需翻墙)原日译版:http://blog-ja.intransient.info/2011/05/c-13.html 在第一部分中,我们对 C 中的未定义行为和它允许 C 较更“安全”之语言更为高效的几个情况略作了解。在第二部转载 2016-10-14 13:06:32 · 633 阅读 · 0 评论 -
每个 C 程序员都应知道的关于未定义行为的那点事(中篇)
译自:http://blog.llvm.org/2011/05/what-every-c-programmer-should-know_14.html(可能需翻墙)原日译版:http://blog-ja.intransient.info/2011/05/c-23.html 在第一部分,我们讨论了是什么未定义行为,以及它如何允许 C 及 C++ 编译器产生较“安全”语言性能为高之代转载 2016-10-14 13:06:05 · 474 阅读 · 0 评论 -
每个 C 程序员都应知道的关于未定义行为的那点事(上篇)
译自:http://blog.llvm.org/2011/05/what-every-c-programmer-should-know.html(可能需翻墙)原日译版:http://blog-ja.intransient.info/2011/05/c-13.html 人们有时会问为什么打开优化后 LLVM 编译出的代码会引发 SIGTRAP。仔细钻研之后,他们发现 Clang 生转载 2016-10-14 13:05:30 · 411 阅读 · 0 评论 -
DMP文件的生成和使用
#include stdio.h>#include afxwin.h>#include dbghelp.h>#pragma comment(lib, "Dbghelp.lib")LONG WINAPI MyUnhandledFilter(struct _EXCEPTION_POINTERS *lpExceptionInfo){ LONG ret = EXC转载 2016-09-27 16:11:01 · 1404 阅读 · 0 评论 -
密码类库Crypto++™ Library 5.1的研究与应用
摘要引言在计算机被广泛应用的信息时代,信息本身就是时间,就是财富。大量信息用数据形式存放在计算机系统里。信息的传输则通过公共信道。这些计算机系统和公共信道是不设防的,是很脆弱的,容易受到攻击和破坏,信息的丢失不容易被发现,而且后果是极其严重。如何保护信息的安全已不仅仅是军事和政府部门感兴趣的问题,其他企事业单位也愈感迫切。因为在网络化的今天,计算机犯罪每年使他们遭受的损失极其巨大,而且还在转载 2015-02-13 23:25:39 · 3394 阅读 · 4 评论 -
跨平台C/C++数据类型定义
1 需考虑问题1.1 编译器运行操作系统l WINDOWS : _WIN32、WIN32;l UNIX/LINUX: unix、__unix、__unix__; l SunOS/SOLARIS: __SVR4、__svr4__、sun、__sun、__sun__、sparc、__sparc、__spar转载 2014-06-28 23:36:05 · 4939 阅读 · 0 评论 -
MD5的C++源码
md5.h:[cpp] view plaincopy#ifndef MD5_H #define MD5_H #include #include /* Type define */ typedef unsigned char byte; typedef unsigned int uint3转载 2014-06-28 21:21:05 · 606 阅读 · 0 评论 -
Qt好书推荐
《Qt Creator快速入门》网友霍亚飞写的,他可算是Qt达人吧。这本书写得通俗易懂。与之配套的还有一个叫《Qt及Qt Quick开发实战精解》,属小项目实战,在入门的基础上学习下载地址:http://download.csdn.net/detail/a17909863341/4617247《精通Qt4编程》网上版本好像有些模糊,如果觉得不转载 2014-05-23 15:08:11 · 1136 阅读 · 1 评论 -
TCP状态转换图
这个图n多人都知道,它对排除和定位网络或系统故障时大有帮助,但是怎样牢牢地将这张图刻在脑中呢?那么你就一定要对这张图的每一个状态,及转换的过程有深刻地认识,不能只停留在一知半解之中。下面对这张图的11种状态详细解释一下,以便加强记忆!不过在这之前,先回顾一下TCP建立连接的三次握手过程,以及关闭连接的四次握手过程。1、建立连接协议(三次握手) (1)客户端发送一个带SYN标志的TCP报转载 2014-05-14 22:53:50 · 634 阅读 · 0 评论 -
STL中的排序
0 前言: STL,为什么你必须掌握对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论 都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言来工作的时候,你会 发现,面对不同的需求你需要一次又一次去用代码重复实现这些已经成熟转载 2012-09-17 17:49:40 · 828 阅读 · 0 评论 -
GDI+ VC2008
如果VC2008自带的.net3.5不行,就下个.net4.0的库下面用 VC2008 来写一个 GdiPlus 的 Demo 工程 Step1:新建一个名为 Demo_GdiPlus 的 MFC AppWizard(exe) 工程操作步骤:(1)主菜单File->New...,选择 Projects 选项卡;(2)在工程类型列表中选中 MFC AppWizard(转载 2012-05-21 18:45:26 · 1173 阅读 · 1 评论 -
在vc2008中用cmd的cl.exe的问题
如果直接在cmd中使用cl的话需要设置比较麻烦的INCLUDE和LIB环境变量,这里介绍一种比较简单的方法:VS->工具->visual studio 2008 Command Prompt,这个环境下自动就把这些复杂的东西设置好了,同时也是个小黑板,仔细看,会发现其实是运行了一个bat文件。如果出现:Setting environment for using Microsof转载 2011-07-05 09:15:02 · 967 阅读 · 0 评论 -
cl 编译选项
一.微软C/C++编译器命令行模式设定方法一1. 参照如下内容(根据你的系统情况,作出相应修改),编写一个批处理文件,假定命名为vs.bat。 @echo off set PATH=C:\WINNT\SYSTEM32;D:\VS.NET\VC7\BIN;D:\VS.NET\COMMON7\IDE set INCLUDE=D:\VS原创 2011-07-05 09:59:24 · 456 阅读 · 0 评论 -
Little Endian & Big Endian
这个标题中的Endian是什么意思呢?还是让我们先来看看下面的情况,这是内存中一个WORD值中的内容,那么这个WORD中的值是0x1234呢,还是0x3412 ? low byte high byte 0x12 0x34 熟悉x86汇编的人立刻就知道这个值应为0x3412,很对,但在一些情况下,比如说你在SGI的机器上看到这种情况,则正好相反,0x1234才是转载 2011-07-13 10:47:18 · 445 阅读 · 0 评论 -
VS2005 C++ 项目怎样添加“依赖”、“库目录”和“包含目录”
1. 添加编译所需要(依赖)的 lib 文件 [解决方案资源管理器]“项目->属性->配置属性->连接器->输入->附加依赖项”里填写“winsock.lib”,多个 lib 以空格隔开。 (等同于“#pragma comment(lib, “winsock.lib”) ”语句) 2. 添加库(Libs)文件目录 方法 1:[解决方案资源管理器]“项目->属性->配置属性->连转载 2011-07-13 17:23:43 · 647 阅读 · 0 评论 -
指针的指针
如果想要通过函数来改变一个变量的值,必须使用指针(引用的本质就是指针),通过传入地址,改变地址指向的值;如果想要通过函数改变一个指针指向的值,这就得使用指针的指针#include #include "Item.h"void CreateItemArray(CItem** a){ CItem** b; b=(CItem**)malloc(sizeof(CItem*)*3);原创 2011-05-04 00:13:00 · 412 阅读 · 0 评论 -
socket 编程步骤
sockets(套接字)编程有三种,流式套接字(SOCK_STREAM),数据报套接字(SOCK_DGRAM),原始套接字(SOCK_RAW);基于TCP的socket编程是采用的流式套接字。服务器端编程的步骤:1:加载套接字库,创建套接字(WSAStartup()/socket());2:绑定套接字到一个IP地址和一个端口上(bind());3:将套接字设置为监听模式转载 2012-02-09 20:50:36 · 11157 阅读 · 0 评论 -
内存对齐详解
转载:1,比如:struct{short a1;short a2;short a3;}A;struct{long a1;short a2;}B;sizeof( A)=6, sizeof( B)=8,为什么?注:sizeof(short)=2,sizeof(long)=4因为:“成员对齐有一个重要的条件,即每个成员按自己的方式对齐.其对齐的转载 2011-12-20 13:33:10 · 469 阅读 · 0 评论 -
VC++6.0 Debug模式与Release模式的区别
今日开会,老高谈及了VC++6.0中有关Debug与Release的不同。简单的就不说了,最重要的是Debug模式下变量的地址是固定的,而Release模式的变量地址则不然。归根到底,是由于Debug模式的变量地址由VC编译器负责分配,而Release模式的变量地址是由操作系统分配的。这也解释了为什么在Debug模式时可以运行的程序,在Release模式下可能根本无法执行。 我目前做的项转载 2012-01-04 11:21:52 · 984 阅读 · 0 评论 -
c++中调用汇编
1 引言 Visual C++ 是当今最流行的软件开发工具之一,它可以实现可视化编程和支持面向对象的编程技术。通常在软件开发的过程中,大部分程序采用高级语言编写,以提高程序的开发效率,但在某些部分,例如程序的关键部分、运行次数很多的部分、运行速度要求很高的部分或直接访问硬件的部分等利用汇编语言编写,以提高程序的运行效率。为了满足两方面的要求,人们在开发的过程中将两种语言进行混合编程,这种原创 2011-05-03 23:57:00 · 875 阅读 · 0 评论 -
正则表达式的用法(C++)
说起正则表达式(Regular Expression),也许有的朋友天天都在使用,比如grep、vim、sed、awk,只是可能对这个名词不大熟悉。正则表达式一般简写为regex或者regexp,甚至是RE。关于正则表达式的介绍,有很多的文章,用搜索引擎查找就可以找到很不错的使用说明。但是在C/C++语言中如何去使用,相应的介绍比较缺乏。大多数C标准库自带regex,可以通过/usr/includ转载 2011-05-04 00:01:00 · 730 阅读 · 0 评论 -
vc2008 cl命令环境变量设置的简介与内容
由于执行C:Program Files\Microsoft Visual Studio 9.0\VC\bin下的vcvars32.bat每次只是在当前命令行窗口起作用,设置环境变量后就更方便操作了首先是cl命令行目录:C:Program Files\Microsoft Visual Studio 9.0\VC\bin,将它加到path环境变量下面添加lib与include环境变量:li转载 2011-07-04 09:26:34 · 574 阅读 · 0 评论 -
开始使用MASM
这篇教程翻译自《Inetl汇编语言程序设计》一书的作者Kip R. Irvine的文章Getting Started with MASM ,翻译的目的在于方便学习。本人翻译水平有限,有兴趣的大侠可以直接阅读原文。 同时感谢Adam_syd的中肯意见。 本教程将在指导你在轻松、有序的过程中,完成学习《Inetl汇编语言程序设计》(第5版)所需的软件环境配置,使你将转载 2011-05-14 11:09:00 · 1006 阅读 · 0 评论 -
windows平台 fwrite写数据出错
今天郁闷了,写文件时,数据源都正确,就是写文件时,写0A时会多写一个0D,导致解析文件时,数据显示错误! 最后,通过查证原来是fwrite在作怪: m_pfData = fopen(m_strFileName, "w+"); 将 "w+“改成为"wb+"就OK了! 原来调用fwrite函数时,如果碰到换行符(0x0A),编译器会自动转换为回车换行转载 2012-02-24 16:08:49 · 4756 阅读 · 0 评论 -
MFC调用DOS窗口显示信息
AllocConsole Function 为主调进程分配一个新的控制台。 语法 C++ : BOOL WINAPI AllocConsole(void); 参数: 无 返回值 :如果函数成功,返回值是非零值;如果函数失败,返回值是零值。 备注: 一个进程仅能关联一个控制台,所以该函数在主调进程已经具有控制台时将会失败。 一转载 2012-05-21 19:39:47 · 3983 阅读 · 1 评论