摘要: http://qpid.apache.org/index.html 我的运行环境 windows 7 x641. 安装并运行c++ broker Windows installer1) 下载 C++ broker windows installerhttp://www.apache.org/dist/qpid/0.5-windows/qpidc-0.5.msi2) 创建目录: C:\TEMP\3)... 阅读全文
posted @ 2009-11-09 10:12 史莱姆 阅读(2850) 评论(1) 推荐(0) 编辑
摘要: The Advanced Message Queuing Protocol (AMQP)是一个标准开放的应用层的消息中间件(Message Oriented Middleware)协议。AMQP定义了通过网络发送的字节流的数据格式。因此兼容性非常好,任何实现AMQP协议的程序都可以和与AMQP协议兼容的其他程序交互,可以很容易做到跨语言,跨平台。DevelopmentAMQP由JPMorgan C... 阅读全文
posted @ 2009-11-09 06:22 史莱姆 阅读(2077) 评论(4) 推荐(0) 编辑
摘要: 1. 什么是中间件?中间件(middleware)是一种独立的系统软件或服务程序, 它在操作系统、网络和数据库之上,应用软件的下层,总的作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件.2. 为什么使用中间件?具体地说,中间件屏蔽了底层操作系统的复杂性,使程序开发人员面对一个简单而统一的开发环境,减少程序设计的复杂性,将注意力集中在自己的业务上,不必... 阅读全文
posted @ 2009-11-09 05:02 史莱姆 阅读(582) 评论(0) 推荐(1) 编辑
摘要: find (find_if) 搜索等于某值的第一个元素 adjacent_find 搜索连续两个相等的元素 find_first_of 搜索等于某个数值之一的第一个元素 find_end 搜索某个子区间最后出现的位置 search 搜索某个子区间第一次出现的位置 search_n 搜索具有某个特性的第一段n个连续元素 binary_search 判断某个区间内是否包含某个元素 ... 阅读全文
posted @ 2009-11-09 03:03 史莱姆 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 构造函数1)initialization list2)异常保护,资源泄漏检查3)this指针的使用4)其他构造函数调用5)虚函数调用6)拷贝构造函数7)隐式类型转换 析构函数1)异常保护2)虚函数调用 成员变量1)compiler - firewall idiom2)访问权限3)traits4)资源管理与智能指针5)引用计数与Copy-On-Write6)const / mutable / vol... 阅读全文
posted @ 2009-11-09 02:59 史莱姆 阅读(181) 评论(0) 推荐(0) 编辑
摘要: 返回值如何实现? 【实现模型1】cfont的实现采用了双阶段转化。1.首先声明一个额外的参数,类型上类对象的引用,用来存放返回结果。2.对这个参数利用返回值进行拷贝初始化。过程类似于参数传递,也是要定义一个临时对象,用来保存返回值,然后在函数内部调用拷贝构造函数用那个return值进行初始化。 X bar() { X xx; // process xx ... return xx; } 编译器转化... 阅读全文
posted @ 2009-11-09 02:58 史莱姆 阅读(405) 评论(0) 推荐(0) 编辑
摘要: Copy-On-Write 使用了“引用计数” 如果使用拷贝构造和operator=初始化对象, 则该对象只是简单增加引用计数, 而在当前类对象改变时, 他会去查看引用计数, 如果有其他类对象共享使用当前的对象, 那么把需要更改的类进行拷贝。 阅读全文
posted @ 2009-11-09 02:58 史莱姆 阅读(177) 评论(0) 推荐(0) 编辑
摘要: 1)纯虚析构函数,如果不提供定义, 子类不能被实例化。 2)明确使用缺省行为 3)提供部分行为 4)应付功能不足的编译器诊断程序 阅读全文
posted @ 2009-11-09 02:57 史莱姆 阅读(321) 评论(0) 推荐(0) 编辑
摘要: 标准形式 T& operator++(); // ++ 前缀T& operator --(); // -- 前缀const T operator++(int); // ++ 后缀const T operator--(int); // -- 后缀// l 是 list<int>, i 是合法的迭代器 1)l.erase(i++); OK 2)l.erase(i)... 阅读全文
posted @ 2009-11-09 02:57 史莱姆 阅读(222) 评论(0) 推荐(0) 编辑
摘要: 1)在函数调用之前,对函数的所有参数的求值必须全部完成 2)一旦一个函数开始执行, 调用者函数中的表达式将不会开始求值,或继续求值,直至被调用函数执行结束,函数执行永远不会交叉进行. 3)如果函数参数是表达式,这些表达式通常可以按任何次序求值,包括交叉求值. 对于f(expr1, expr2) 编译器可能先对expr1 求值,也可能后对expr1求值,或者让expr1 和 expr2 的求值交叉进... 阅读全文
posted @ 2009-11-09 02:56 史莱姆 阅读(301) 评论(0) 推荐(0) 编辑
摘要: 贪婪匹配 原则是说, 编译器在将源码中的字符解析成一个个标记时,会使用一种贪婪匹配算法, 也就是说尽可能让一个标记包含更多的字符 a---b; 阅读全文
posted @ 2009-11-09 02:55 史莱姆 阅读(153) 评论(0) 推荐(0) 编辑
摘要: 具有non-trivial的构造函数,拷贝构造函数, 析构函数和重载赋值操作符的类对象和数组不可以作为union的成员 阅读全文
posted @ 2009-11-09 02:55 史莱姆 阅读(262) 评论(0) 推荐(0) 编辑
摘要: 1)所有虚基类子对象会按照深度优先,从左到右的顺序进行初始化 2)直接基类子对象按照他们在类定义中的声明的顺序被构造起来 3)非静态成员子对象按照他们在类定义体中声明的顺序被构造起来 4)构造函数体被执行 class B1{};class V1: public B1{};class D1: virtual public V1{}; class B2{};class B3{};class V2: p... 阅读全文
posted @ 2009-11-09 02:54 史莱姆 阅读(261) 评论(0) 推荐(0) 编辑
摘要: 1. private的可见性: 私有成员对于任何能够看到其所属类定义的代码来说都是可见的。他会参与名字查找和重载决议, 因而可能使调用变得无效或具有二义性, 即使它本身可能永远不会被调用。 2. private的可访问性: 具有对某个成员的访问权的代码可以通过泄露该成员的指针的方式将其访问权限授予其他任何代码。 成员的名字只对其所属类的其他成员或者友元来说是可访问的, 而这里的其他成员也... 阅读全文
posted @ 2009-11-09 02:54 史莱姆 阅读(468) 评论(0) 推荐(0) 编辑
摘要: 1. C++标准规定,函数模板不能偏特化2. 函数模板的特化并不参与重载决议非模板函数是C++的一等公民如果编译器没有发现合适的一等公民, 那么主函数模板作为C++中的二等公民被纳入考虑如果还不能选出唯一的主函数模板,编译器会根据一组相当晦涩的规则确定出那个主函数模板是最特化的函数模板特化并不参与重载决议.只有在某个主模板被重载的决议前提下,其特化版本才有可能被使用.而且编译器在选择住模板的时候并... 阅读全文
posted @ 2009-11-09 02:53 史莱姆 阅读(692) 评论(0) 推荐(1) 编辑
摘要: 1. 特化friend class template<class T> class Node;template<class T>class Tree{friend class Node<T>;} 2. 特化friend function1) 如果函数名前面没有::,就绝对不会引用某个template实体2) 如果函数名前面含有::,编译器会优先匹配常规non-t... 阅读全文
posted @ 2009-11-09 02:53 史莱姆 阅读(148) 评论(0) 推荐(0) 编辑
摘要: 私有继承是组合的一种语法上的变形(聚合或者 “有一个”) 例如,“汽车有一个(has-a)引擎”关系可以用单一组合表示为: class Engine {public: Engine(int numCylinders); void start(); // Starts this Engine};class Car {public: Car()... 阅读全文
posted @ 2009-11-09 02:49 史莱姆 阅读(585) 评论(0) 推荐(0) 编辑
摘要: &*iter的用法 指向数组内元素的指针永远都是迭代器, 迭代器并非总是指针.所有符合标准的迭代器都要求提供operator*(),而且该操作符必须返回一个真正的T&。&*iter将迭代器转型为指针 &*iter, 先将迭代器解引用,获得容器内对象的直接引用,然后获取它的地址。 阅读全文
posted @ 2009-11-09 02:49 史莱姆 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 万不得已时才使用“placement new”语法。只有当你真的在意对象在内存中的特定位置时才使用它。例如,你的硬件有一个内存映象的 I/O计时器设备,并且你想放置一个Clock对象在那个内存位置。 阅读全文
posted @ 2009-11-09 02:48 史莱姆 阅读(195) 评论(0) 推荐(0) 编辑
摘要: 当一个查看函数和一个变更函数名字相同,且参数个数与类型也相同时就有用了——即两者的不同之处仅在于一个有const另一个没有const。 const重载的一个常见应用是下标运算符。通常应该尽量使用标准模板容器,例如std::vector,但有时会需要在自己的类中支持下标运算符。一个经验法则是:下标运算符通常成对出现。 class Fred { ... };class MyFr... 阅读全文
posted @ 2009-11-09 02:48 史莱姆 阅读(341) 评论(0) 推荐(0) 编辑