
c++编程
charlie_2010
这个作者很懒,什么都没留下…
展开
-
C和C++混合编程(__cplusplus 与 external "c" 的使用)
第一种理解比如说你用C++开发了一个DLL库,为了能够让C语言也能够调用你的DLL输出(Export)的函数,你需要用extern "C"来强制编译器不要修改你的函数名。通常,在C语言的头文件中经常可以看到类似下面这种形式的代码:#ifdef __cp转载 2011-08-09 19:21:12 · 600 阅读 · 1 评论 -
c++中宏定义## 的用法
#define BEGIN_INTERFACE_PART(localClass, baseClass) \ class X##localClass : public baseClass \#define Conn(x,y) x##y#define ToChar(x) #@x#define ToString(x) #xx##y表示什么?表示x连接y,举例说:i原创 2011-12-28 15:41:12 · 867 阅读 · 0 评论 -
zeromq的多进程通讯的例子
client:C/C++ code#include zmq.h>#include string.h>#include stdio.h>#include unistd.h> int main (){ void *context = zmq_init (1); // Socket to talk to server printf ("Conne转载 2012-03-13 16:51:01 · 3131 阅读 · 0 评论 -
当使用lua_call时,请用lua_atpanic为其设置panic函数
为何使用lua_atpanic当调用无保护的lua_call后,如果调用栈发生错误(lua_error),那么默认行为是直接退出宿主程序。(可以参考这篇文章)要避免这样的情况,一种方法是定义自己的panic函数,并作为参数调用lua_atpanic;此外为了避免退出宿主程序,自定义的panic函数应该永不返回(通常是做一个长跳转,令其跳转至lua_call调用点,不过这种做法几乎与lua_转载 2012-05-29 14:39:33 · 3912 阅读 · 0 评论 -
在main函数之前调用函数,以及对设计的作用
前几天为新员工写一个简单的测试框架,可让他们方便的写测试用例并且执行。期间遇到一个问题就是如何让他们增加测试用例而用不影响测试框架的代码?c++的单件模式可以解决这个问题,但是其中一个难点是要在main之前注册单件。c++可以通过构造函数来实现注册,c如何注册?最后查了下资料,原来可以定义在main之前调用的函数!有了这个特性可以改善c的模块化设计。特性介绍:如果想定义在m转载 2012-06-13 11:43:44 · 634 阅读 · 0 评论 -
[转]main 之前与之后
【转自CLive Studio 百度空间】我之所以提出这个问题,缘于一些IT公司招聘开发人员的笔试题或者面试题:C++ 中能不能让一些代码在 main() 之前或者之后执行?答案理所当然可以的。这可以有很多实现方法。下面例举:1、一般来说,全局域的变量(包括静态变量)赋值、初始化等工作都是在main之前执行的。此时初始化变量调用的普通赋值函数,初始化对象调用的类转载 2012-06-13 11:33:30 · 636 阅读 · 0 评论 -
在程序中获取编译时SVN的版本号
程序中一般会加入程序的版本信息,用“-v”来查看。有时候还会加入编译时间,这个比较好实现,使用__TIME__和__DATE__宏就可以了,程序的大版本号一般都是手动写的。出于某种需要,我希望在程序中获取到编译时svn的版本号,查了写资料,有说用svn prop来做的,也有说用svn hook来做的,我觉得这个太复杂,而且是在每次提交都做修改,没必要。于是乎,我想到也用宏来原创 2012-06-14 16:54:55 · 4252 阅读 · 1 评论 -
linux下内存泄露检测方法
linux下内存泄露检测方法本文针对 linux 下的 C++ 程序的内存泄漏的检测方法及其实现进行探讨。其中包括 C++ 中的 new 和 delete 的基本原理,内 存检测子系统的实现原理和具体方法,以及内存泄漏检测的高级话题。作为内存检测子系统实现的一部分,提供了一个具有更好的使用特性的互斥体 (Mutex)类。1.开发背景在 windows 下使用 VC 编程转载 2012-06-28 20:14:53 · 4540 阅读 · 1 评论 -
c++ new操作符的重载
关于c++ new操作符的重载你知道c++ 的new 操作符和operator new 的区别么?也许你还会问,他们有区别吗? 当你写下面这样的代码时,string *pa = new string("memory managerment");你使用的是new 操作符,这个操作符和sizeof 一样,是c++ 语言级别支持的。你不能改变它的语义,它做的事情总是不变的:分配足够的转载 2012-06-30 13:19:27 · 678 阅读 · 0 评论 -
C++中的 new / delete
/*****************************************************************************//* C++中的 new / delete *//***************************************转载 2012-07-02 09:10:46 · 399 阅读 · 0 评论 -
多线程下,生产者消费者锁的优化问题
对于多线程下,各模块之间数据交换一般是用队列来完成的,即生产者消费者模型,但是这种模型效率问题是令人头疼的问题优化有两种,1,事件通知 2,微软的单人单出的队列原创 2012-10-16 09:45:14 · 800 阅读 · 0 评论 -
C++解析xml利器—tinyxml图解法
在上篇博客中,提到了解析xml,作为一名实在的java程序猿。在java中解析xml方法有dom以及sax。习惯dom的我,在c++初次接触xml时,肯定使用惯性以及联想思维。在c++中解析xml有很多种,在此,给大家讲一下最简单,最方便,跟Dom一样方便的tinyxml方式。TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编转载 2012-11-07 09:15:57 · 790 阅读 · 0 评论 -
C++11中值得关注的几大变化
声明:本文源自 Danny Kalev 在 2011 年 6 月 21 日发表的《The Biggest Changes in C++11(and Why You Should Care)》一文,几乎所有内容都搬了过来,但不是全文照译,有困惑之处,请参详原文(http://www.softwarequalityconnection.com/2011/06/the-biggest-changes-i转载 2011-11-08 11:27:44 · 423 阅读 · 0 评论 -
C/C++沉思-----const的简单用法
一 const与指针1 指针常量 int*const ptr;指针常量,即不可以将ptr修改为指向内存中另一处的地址,但可以用它来改变它所指向的地址处的数据内容。view plainprint?//const.cpp #include #include using namespace std; int转载 2011-11-04 14:58:27 · 393 阅读 · 0 评论 -
Template不能推导返回值
侯捷的《STL源码剖析》中提到“template参数推导机制”推而导之的只是参数,而无法推导函数的返回值类型,其意思是这样的:#include using namespace std;template W Add(I a, T b)原创 2011-08-12 15:56:20 · 1173 阅读 · 1 评论 -
C++ Primer 4th 笔记,模板与泛型编程(1)
1、所谓泛型编程就是以独立于任何特定类型的方式编写代码。使用泛型程序时,我们需要提供具体程序实例所操作的类型或值。 在泛型编程中,我们所编写的类和函数能够多态地用于跨越编译时不相关的类型。2、模板是泛型编程的基础。3、面向对象编程的多态性称为运行是多转载 2011-08-12 15:32:56 · 574 阅读 · 0 评论 -
函数调用方式的区别[thiscall,__cdecl,__stdcall]
通常在使用VC进行函数定义时会指定该函数调用方式,诸如: int __stdcall max(int a, int b) { return a>b?a:b; } int __cdecl min(int a, int b) { ret转载 2011-09-14 19:14:58 · 515 阅读 · 0 评论 -
模板特化和偏特化
C++中的模板分为类模板和函数模板,.模板的特化(1) 类模板特化有时为了需要,针对特定的类型,需要对模板进行特化,也就是特殊处理.例如,stack类模板针对bool类型,因为实际上bool类型只需要一个二进制位,就可以对其进行存储,使用一个字或者一个字节都转载 2011-08-20 10:17:46 · 756 阅读 · 0 评论 -
c++ 类的大小问题
class Aclass{public: Aclass(); virtual ~Aclass();};AClass的大小为4是因为你的析构函数被定义为虚拟的,这就引入了一个隐含的虚表指针成员,32位平台上,指针的大小为4字节;原创 2011-08-29 09:46:51 · 1190 阅读 · 1 评论 -
C++中的四种强制类型转换的区别
使用标准C++的类型转换符:static_cast、dynamic_cast、reinterpret_cast、和const_cast。 1 static_cast用法:static_cast ( expression ) 该运算符把expression原创 2010-11-30 17:41:00 · 690 阅读 · 0 评论 -
Lockless Programming Considerations for Xbox 360 a
Programming with locks用lock做多线程编程是很直接的一个事情。一个getlock(); 一个releaseLock();就可以保证中间代码执行是线程安全的。实际情况中比较有问题的还是等待锁时候所花费的时间。这篇文章也正是讨论这种减少锁等待的情况。Atomic operation不可分割的操作,在这个operation在一个线程中执行的过程中,其他转载 2011-10-20 11:21:10 · 565 阅读 · 0 评论 -
C++程序设计之四书五经/C++学习书籍介绍
C++是一门广泛用于工业软件研发的大型语言。它自身的复杂性和解决现实问题的能力,使其极具学术研究价值和工业价值。和C语言一样,C++已经在许多重要的领域大获成功。 然而,一个不可否认的现实是,在低阶程序设计领域,C++挤压着C同时也在承受着C的强烈反弹,而在高阶程序设计领域,Java和C#正在 不断蚕食着C++的地盘。也许C++与C合为一体永远都是一个梦想,也许Java和C#的狂潮终将迫转载 2011-11-17 18:52:22 · 913 阅读 · 0 评论 -
面向对象的三个基本特征
面向对象的三个基本特征是:封装、继承、多态。 封装封装最好理解了。封装是面向对象的特征之一,是对象和类概念的主要特性。封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏转载 2011-11-04 09:59:49 · 389 阅读 · 0 评论 -
析构函数virtual和非virtual的区别
作为通常的原则,如果一个类定义了虚函数,那么它的析构函数就应当是virtual的。因为定义了虚函数则隐含着:这个类会被继承,并且会通过基类的指针指向子类对象,从而得到多态性。 这个类可能会被继承,并且会通过基类的指针指向子类对象”,因此基类的析构函数是否为虚将决定子类的对象是否被析构示例代码:#include iostream.h>struct A{转载 2011-11-05 10:27:56 · 559 阅读 · 0 评论 -
c++ string使用详解
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。string ( ); string ( c转载 2011-11-04 14:24:53 · 480 阅读 · 0 评论 -
算法学习笔记----快速排序
一、算法描述 快速排序是一种最坏情况时间复杂度为Θ(n^2)的排序算法。虽然最坏情况时间复杂度很差,但是快速排序通常是实际排序应用中最好的选择,因为它的平均性能非常好:它的期望时间复杂度为Θ(nlgn),而且Θ(nlgn)中隐含的常数因子非常小。另外,它还能原址排序,甚至在虚存环境中也能很好地工作。算法步骤如下所示:1、将源数组A[p..r]划分为两两个子数组A[p..q转载 2013-02-25 16:22:41 · 827 阅读 · 0 评论