
C++
文章平均质量分 88
凭谁问
做自己所爱的
展开
-
基于模板元编程技术的跨平台C++动态链接加载库
基于模板元编程技术的跨平台C++动态链接加载库。通过模板技术,使用者仅需通过简单的宏,即可使编译器在编译期自动生成加载动态链接库导出符号的代码,无任何额外的运行时开销。[cpp] view plaincopyprint?extern "C" { typedef int(*Proc_fnTestDll)();转载 2015-12-17 20:58:53 · 907 阅读 · 0 评论 -
std::string常用算法
toupper, tolower地球人都知道 C++ 的 string 没有 toupper ,好在这不是个大问题,因为我们有 STL 算法:string s("heLLo");transform(s.begin(), s.end(), s.begin(), toupper);cout transform(s.begin(), s.end(), s.begin(), tol转载 2013-04-16 09:56:05 · 2406 阅读 · 0 评论 -
关于栈、堆、静态存储区最大可分配大小的探讨
中午看《编程之美》的第2.5节中有这么一小段程序:float array[100 000 000];这个1亿个float变量,这样就有8亿个字节,转化为二进制单位G,就是小于等于1G。这样大小的数组量只能用堆(动态申请内存变量)或者静态存储区(全局变量)来申请。 好了,转入今天要讲的正题。到底栈、堆、静态存储区能申请的最大分配大小是多少呢? 栈(stack转载 2013-04-11 13:43:03 · 1372 阅读 · 0 评论 -
stringstream clear()的误区
stringstream是个好东西,网上有不少文章,讨论如何用它实现各种数据类型的转换(比如把double或int转换为string类型)。但如果stringstream使用不当,当心内存出问题(我就吃过亏^_^)。试试下面的代码,运行程序前打开任务管理器,过不了几十秒,所有的内存都将被耗尽!#include #include #include using namespac转载 2013-03-19 14:59:56 · 932 阅读 · 0 评论 -
winsock的select模型
select函数: 系统提供select函数来实现多路复用输入/输出模型。原型: #include sys/time.h> #include unistd.h> int select(int maxfd,fd_set *rdset,fd_set *wrset,fd_set *exset,struct timeval转载 2013-03-17 18:24:10 · 738 阅读 · 0 评论 -
C++ Scoket编程
介绍 Socket编程让你沮丧吗?从man pages中很难得到有用的信息吗?你想跟上时代去编Internet相关的程序,但是为你在调用 connect() 前的bind() 的结构而不知所措?等等…好在我已经将这些事完成了,我将和所有人共享我的知识了。如果你了解 C 语言并想穿过网络编程的沼泽,那么你来对地方了。读者对象 这个文档是一个指南,而不是参考书。如果你刚开始 socke转载 2013-03-17 23:04:26 · 3519 阅读 · 0 评论 -
std::string详解
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必 担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。标准模板库(STL)提供了一个std::strin转载 2013-03-15 12:27:01 · 15368 阅读 · 0 评论 -
大端法、小端法、网络字节序
关于字节序(大端法、小端法)的定义《UNXI网络编程》定义:术语“小端”和“大端”表示多字节值的哪一端(小端或大端)存储在该值的起始地址。小端存在起始地址,即是小端字节序;大端存在起始地址,即是大端字节序。也可以说: 1.小端法(Little-Endian)就是低位字节排放在内存的低地址端即该值的起始地址,高位字节排放在内存的高地址端。 2.大端法(Big-Endian)就是高转载 2013-03-12 17:33:48 · 853 阅读 · 0 评论 -
DLL的概念、dll导出类
1、 DLL的概念DLL(Dynamic Linkable Library),动态链接库,可以向程序提供一些函数、变量或类。这些可以直接拿来使用。静态链接库与动态链接库的区别:(1)静态链接库与动态链接库都是共享代码的方式。静态链接库把最后的指令都包含在最终生成的EXE文件中了;动态链接库不必被包含在最终EXE文件中,EXE文件执行时可以“动态”地引用和卸载这个与EXE独立的DLL文件转载 2013-03-11 17:13:36 · 900 阅读 · 0 评论 -
__declspec(dllimport)的作用
是时候总结一下__declspec(dllimport)的作用了。可能有人会问:__declspec(dllimport)和__declspec(dllexport)是一对的,在动态链接库中__declspec(dllexport)管导出,__declspec(dllimport)管导出,就像一个国家一样,有出口也有进口,有什么难理解的呢?这是一种很自然的思路,开始我也是这样理解。转载 2013-03-07 16:31:50 · 641 阅读 · 0 评论 -
拷贝构造函数详解
一. 什么是拷贝构造函数首先对于普通类型的对象来说,它们之间的复制是很简单的,例如:[c-sharp] view plaincopyprint?int a = 100; int b = a; int a = 100;int b = a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单转载 2013-03-06 10:32:03 · 751 阅读 · 0 评论 -
C++ 宏定义 详解
一、#define的基本用法 #define是C语言中提供的宏定义命令,其主要目的是为程序员在编程时提供一定的方便,并能在一定程度上提高程序的运行效率,但学生在学习时往往不能 理解该命令的本质,总是在此处产生一些困惑,在编程时误用该命令,使得程序的运行与预期的目的不一致,或者在读别人写的程序时,把运行结果理解错误,这对 C语言的学习很不利。1 #define命令剖析1转载 2013-07-08 17:10:01 · 2427 阅读 · 0 评论 -
C++的RTTI和dynamic_cast效率问题
在网上经常看到有人说,dynamic_cast的效率问题.当然因为它是运行 时的cast,开销必然少不了.对于down cast,可以用static_cast代替,只不过不太安全.对于钻石结构类关系,要cast到兄弟类,那么只能用dynamic_cast了.记得我在做前一个项目中,发现召唤了500个一样的怪物的时候客户端巨卡,于是把可以优化的地方都搞了一遍,包括把dynamic_cas转载 2013-07-19 13:56:13 · 13100 阅读 · 0 评论 -
每个C++开发者都应该使用的十个C++11特性
这篇文章讨论了一系列所有开发者都应该学习和使用的C++11特性,在新的C++标准中,语言和标准库都加入了很多新属性,这篇文章只会介绍一些皮毛,然而,我相信有一些特征用法应该会成为C++开发者的日常用法之一。你也许已经找到很多类似介绍C++11标准特征的文章,这篇文章可以看成是那些常用特征描述的一个集合。 目录:auto关键字nullptr关键字基于区间的循环Override和fi转载 2015-12-15 19:23:46 · 787 阅读 · 0 评论 -
轻量级序列化库boost serialization
对象序列化是项目中最经常看到的场景,因此实现该功能的库也有很多,如:thrift、protobuf、avro,但我觉得这些库都太过沉重,因为他们还提供了rpc的功能,如果只是单纯做对象序列化,boost serialization是个不错的选择,以下boost serialization简称BS。一、代码目录1.$BOOST_HOME/archive存档方式类目录类型转载 2015-04-27 21:00:07 · 1133 阅读 · 0 评论 -
C++元编程和Boost编程库 (C++ Metaprogramming and Boost MPL )上部
整理自http://kuibyshev.bokee.com/1584716.html引论 C++的发展史是一个不断吸收程序设计领域精华和不断积累充实语言特性的过程。它的创造者Stroustrup在这门新的编程语言草创之初就定下了几个基本的目标,二十年过去了,至今这些目标仍然是C++继续发展的指南针。其中他明确指出,这种语言不应强迫程序员使用单一程序设计形式[20]原创 2014-02-14 16:18:26 · 3070 阅读 · 1 评论 -
Boost智能指针——shared_ptr
boost::scoped_ptr虽然简单易用,但它不能共享所有权的特性却大大限制了其使用范围,而boost::shared_ptr可以解决这一局限。顾名思义,boost::shared_ptr是可以共享所有权的智能指针,首先让我们通过一个例子看看它的基本用法:#include#include#includeclass implementation{public:转载 2013-02-01 17:42:46 · 548 阅读 · 0 评论 -
Boost.Asio技术文档
asioAsioboostBoostc++C++异步IO目录(?)[+]综述基本原理核心概念和功能解析BoostAsioProactor设计模式无线程并发Proactor和BoostAsioProactor 设计模式使用Reactor的实现实现Windows的重叠IO优点缺点线程和BoostAsio线程安全线程池内部线程Strands转载 2013-03-17 23:09:04 · 2355 阅读 · 0 评论 -
Boost.Lambda
Boost.Lambda是什么?Boost Lambda库是C++模板库,以C++语言实现了lambda抽象.Lambda这个术语来自函数编程语言和lambda闭包理论,lambda抽象实际上定义了匿名函数.了解过C#新引入的匿数函数特性或Lisp编程的人,对这些概念理解会有很大帮助.Lambda库设计的主要动机是为STL算法提供灵活方便的定义匿名函数对象的机制.这个Lambda库究竟是有什么转载 2013-04-15 13:52:39 · 709 阅读 · 0 评论 -
学习随笔 一 SOA AOS 面向对象与面向数据
SOA 数组的结构与AOS结构的数组,是面向数据和面向对象设计的区别之一。在需要高频率(如渲染循环中)访问数据的时候,一般情况下SOA的效率高于AOS,因为将需要频繁访问的数据连续存放会大大提高访问速度。虽然AOS的结构可能更适合面向对象设计,但是在高度依赖效率的地方应该使用SOA。引用大家都在说的一句话:一开始写程序用struct (c方式的编程,面向数据的编程) 后面开始用class原创 2014-01-03 14:14:33 · 5244 阅读 · 0 评论 -
C++ 优化技术导论
【介绍】本文完整的描述了C++语言的性能优化方法,从编译器、算法、语言特性、硬件、Linux等多个角度去考虑问题,文章技术含量很高,值得一看。来源:http://www.whysearch.org/a/zh_CN/date/20110824作者:冲出宇宙【目录】第一章 性能优化原理第二章 善用编译器第三章 算法为王第四章 c++语言特性第五章转载 2013-07-19 17:06:20 · 1902 阅读 · 0 评论 -
RTTI、虚函数和虚基类的实现方式、开销分析及使用指导
“在正确的场合使用恰当的特性” 对称职的C++程序员来说是一个基本标准。想要做到这点,首先要了解语言中每个特性的实现方式及其开销。本文主要讨论相对于传统 C 而言,对效率有影响的几个C++新特性:编译时开销 运行时开销 相关文档:C++编码规范与指导 C++异常机制的实现方式和开销分析 多处理器环境和线程同步的高级话题C++0x(C++11)新特性点评 相对于传统的 C转载 2013-07-19 16:26:38 · 815 阅读 · 0 评论 -
OGRE中的任意类型 Any
有些时候我们可能想做这样一件事:float f = 1.f;int n = 2;std::vector myContainer; // X是一个虚构的用户定义类型myContainer.pushback(X(f));myContainer.pushback(X(n)); 我们想在一个容器里保存两种乃至多种不同的数据类型。但是,显然普通的模板参数如转载 2013-07-19 14:23:34 · 772 阅读 · 0 评论 -
常用字符串分割(C++)
经常碰到字符串分割的问题,这里总结下,也方便我以后使用。一、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串时则返回NULL。示例://借助st转载 2013-02-07 14:05:17 · 677 阅读 · 0 评论 -
C/C++ 字符编码的转换(ut8、gb2312)
//这是个类strCoding (strCoding.h文件)#pragma once#includeiostream>#includestring>#includewindows.h>usingnamespace std;class strCoding{public: strCoding(void); ~strCoding转载 2013-02-06 16:14:05 · 1116 阅读 · 0 评论 -
Ogre1.7地形浅析
早在1年前,就想好好研究一下Ogre1.7的新地形,但是各种原因导致现在我才下载了Ogre1.73的源码进行研究。而且只能在业余时间研究,Ogre的以前地形一直被人诟病,根本无法用于游戏,于是Ogre爱好者只好自己实现一些地形插件来解决这个问题,比如ETM之类。在国内,比较成功的就是天龙八部的地形系统。我对天龙的研究算是比较精通,他的地形效率上我也改进了不少,但是不能实现splatting和L转载 2013-01-22 16:02:38 · 632 阅读 · 0 评论 -
窗口全屏,覆盖任务栏
给人做个东西,有这个要求先放上一些玩意的隐藏任务栏::ShowWindow(::FindWindow(_T("Shell_TrayWnd"), NULL), SW_HIDE);开始菜单 ::ShowWindow(::GetDlgItem(::FindWindow(_T("Shell_TrayWnd"), NULL),0x130), SW_HIDE);//0x130 是开始按钮的ID转载 2012-12-17 15:00:59 · 2738 阅读 · 2 评论 -
static_cast dynamic_cast reindivter_cast const_cast 详解
C 风格(C-style)强制转型如下: (T) exdivssion // cast exdivssion to be of type T 函数风格(Function-style)强制转型使用这样的语法: T(exdivssion) // cast exdivssion to be of type T 这两种形式之间没有本质上的不同,它纯粹就是一个把括号放在哪的问题。我把这转载 2012-12-14 10:41:14 · 703 阅读 · 0 评论 -
DLL搜索顺序问题详解
DLL的动态链接有两种方法。一种是加载时动态链接(Load_time dynamic linking)。Windows搜索要装入的DLL时,按以下顺序:应用程序所在目录→当前目录→Windows SYSTEM目录→Windows目录→PATH环境变量指定的路径。 前天看到这几句,突然设计出一道自认绝妙的笔试题:“如果采用加载时动态链接的方式,Windows搜索要装入的DLL采用转载 2012-12-14 11:33:06 · 1205 阅读 · 0 评论 -
对一个C++函数的效率优化(好)
作者:Hub Sutter译者:plpliuly/*此文是译者出于自娱翻译的GotW(Guru of the Week)系列文章第二篇,原文的版权是属于Hub Sutter(著名的C++专家,"Exceptional C++"的作者)。此文的翻译没有征得原作者的同意,只供学习讨论。——译者*/#2 临时对象难度:5/10不必要的临时对象常常导致代码冗余和执行效率低下。问转载 2012-10-10 23:48:27 · 1941 阅读 · 0 评论 -
More Effective C++:自增和自减
很久以前(八十年代),没有办法区分++和--操作符的前缀与后缀调用。这个问题遭到程序员的报怨,于是C++语言得到了扩展,允许重载increment 和 decrement操作符的两种形式。 然而有一个句法上的问题,重载函数间的区别决定于它们的参数类型上的差异,但是不论是increment或decrement的前缀还是后缀都只有一个参数。为了解决这个语言问题,C++规定后缀形式有一个i转载 2012-10-11 00:40:05 · 1095 阅读 · 0 评论 -
C/C++面试题:i++与++i哪个效率更高?
解析:在这里声明,简单的比较前缀自增运算符和后缀自增运算符的效率是片面的,因为存在很多因素影响这个问题的答案。首先考虑内建数据类型的情况:如果自增运算表达式的结果没有被使用,而是仅仅简单的用于增加一员操作数,答案是明确的,前缀法和后缀法没有任何区别,编译器的处理都应该是相同的,很难想象得出有什么编译器实现可以别出心裁在二者之间制造任何差异。我们看看下面这个程序: #inclu转载 2012-10-11 00:11:30 · 6558 阅读 · 3 评论 -
应用程序无法正常启动0xc0150002 解决方案
我也遇到过此问题,解决办法:方案一: 在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“否”。此方法阻断了问题产生的源头,其每次生成exe文件时都直接嵌入清单文件,而不是默认的根据时戳而决定是否更新清单文件。方案二:不嵌入清单文件。在项目的“属性|配置属性|清单工具|输入和输出”中的“嵌入清单”选择“否”,从而在生成exe文件时附随生成一个清单文件(默认情况下,其文件名为e转载 2012-08-15 17:05:59 · 135132 阅读 · 15 评论 -
vs2008 注释模版
一. 目的在程序的开发中,注释是必不可少的一部分。对于大多数注释,都有着相似的样子,另外,在团队开发的过程,不同的开发者可能各自使用不同的注释风格进行编写注释。为了提高在开发过程中,编写注释的效率,以及规范团队开发过程中所有人使用相同的注释风格,可以利用VS提供的Macro扩展功能,实现一套Macro模板。在使用的过程中,只需要使用相应的快捷键,便可使用预定好的注释模板,这时候,只需要修改相应转载 2012-02-13 09:54:49 · 1642 阅读 · 0 评论 -
自用调试宏
#define PF_ASSERT Q_ASSERT //调试宏#define PRINTINFO PrintMacInfo(__FUNCTION__, __FILE__, __LINE__);#ifdef REALSHARK_DEBUG#define DEBUGPRINT(x) std::cout#else#define DEBUGPRINT(x)#endif原创 2012-02-13 18:09:34 · 564 阅读 · 0 评论 -
如何编写优质、高效、益于维护的C++代码
如何编写优质、高效、益于维护的代码是每个程序开发人员都关心的一个话题,尽管大家都知道一些,但是在实际写代码时还是会犯一些错误,下面就结合我的一些经验写一点总结,供大家参考:1、首先是程序中变量、函数及类等的命名,这是一个老话题,但是很重要。尽量是看了你的命名就能大致明白变量或者函数的意义和作用。如成员变量一般都别忘了加上前缀"m_",对于整型值别忘了加上"n",float型加上"f",char转载 2012-02-11 01:54:07 · 707 阅读 · 0 评论 -
Qt Model/View( 一)
http://doc.trolltech.com/main-snapshot/model-view-programming.html介绍Qt 4推出了一组新的item view类,它们使用model/view结构来管理数据与表示层的关系。这种结构带来的功能上的分离给了开发人员更大的弹性来定制数据项的表示,它也提供一个标准的model接口,使得更多的数据源可以被这些item view使用。这转载 2012-12-18 15:24:56 · 898 阅读 · 0 评论 -
漫谈QWidget及其派生类(二)
上一部分漫谈QWidget及其派生类(一) 介绍了QWidget及其派生类,分:窗口、普通控件两种类型(其实有个Qt::SubWindow没有提,不过本系列中也没有介绍它的打算,因为我不熟)。本文接下来试图看看 QLayout 与窗口的几何尺寸控制。注意:本文只是试图解释,QLayout其实没有任何神秘的东西,它所有的功能离开它你也都可以做。但这并不是鼓励大家不使用QLayout。转载 2012-12-18 15:17:03 · 642 阅读 · 0 评论 -
调试常用的 __FILE__, __FUNCTION__, __LINE__
调试常用的 __FILE__, __FUNCTION__, __LINE__没想到 VC6 不支持 __FUNCTION__所以我写了如下的奇怪代码//用来记录当前行和当前函数//也可说是记录 堆栈void log_stack(const char *file, int line, const char * function);//当然还要对 __FUN转载 2013-01-31 13:57:39 · 673 阅读 · 0 评论 -
window异常处理
闲来无事作点翻译工作,今天要介绍的是关于错误处理的.以下内容大部分不是我的原创,我只是把他们收集到一起来了而已. 错误处理在一个系统里面算是一个比较底层的东西了.拥有一个稳定的错误处理系统,是一个良好的系统的基础.从发展的角度看,错误处理大体有下面几种方式. 比较基础的,使用返回值表示错误还是正确,比如使用int作为返回值,0表示正常1表示错误,这种算是c语言里面的办法了,比如转载 2013-01-31 13:53:48 · 1363 阅读 · 0 评论