随笔分类 -  C++/STL

摘要:贪婪匹配 原则是说, 编译器在将源码中的字符解析成一个个标记时,会使用一种贪婪匹配算法, 也就是说尽可能让一个标记包含更多的字符 a---b; 阅读全文
posted @ 2009-11-09 02:55 史莱姆 阅读(160) 评论(0) 推荐(0)
摘要:具有non-trivial的构造函数,拷贝构造函数, 析构函数和重载赋值操作符的类对象和数组不可以作为union的成员 阅读全文
posted @ 2009-11-09 02:55 史莱姆 阅读(266) 评论(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 史莱姆 阅读(266) 评论(0) 推荐(0)
摘要:1. private的可见性: 私有成员对于任何能够看到其所属类定义的代码来说都是可见的。他会参与名字查找和重载决议, 因而可能使调用变得无效或具有二义性, 即使它本身可能永远不会被调用。 2. private的可访问性: 具有对某个成员的访问权的代码可以通过泄露该成员的指针的方式将其访问权限授予其他任何代码。 成员的名字只对其所属类的其他成员或者友元来说是可访问的, 而这里的其他成员也... 阅读全文
posted @ 2009-11-09 02:54 史莱姆 阅读(488) 评论(0) 推荐(0)
摘要:1. C++标准规定,函数模板不能偏特化2. 函数模板的特化并不参与重载决议非模板函数是C++的一等公民如果编译器没有发现合适的一等公民, 那么主函数模板作为C++中的二等公民被纳入考虑如果还不能选出唯一的主函数模板,编译器会根据一组相当晦涩的规则确定出那个主函数模板是最特化的函数模板特化并不参与重载决议.只有在某个主模板被重载的决议前提下,其特化版本才有可能被使用.而且编译器在选择住模板的时候并... 阅读全文
posted @ 2009-11-09 02:53 史莱姆 阅读(725) 评论(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 史莱姆 阅读(151) 评论(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 史莱姆 阅读(596) 评论(0) 推荐(0)
摘要:&*iter的用法 指向数组内元素的指针永远都是迭代器, 迭代器并非总是指针.所有符合标准的迭代器都要求提供operator*(),而且该操作符必须返回一个真正的T&。&*iter将迭代器转型为指针 &*iter, 先将迭代器解引用,获得容器内对象的直接引用,然后获取它的地址。 阅读全文
posted @ 2009-11-09 02:49 史莱姆 阅读(527) 评论(0) 推荐(0)
摘要:万不得已时才使用“placement new”语法。只有当你真的在意对象在内存中的特定位置时才使用它。例如,你的硬件有一个内存映象的 I/O计时器设备,并且你想放置一个Clock对象在那个内存位置。 阅读全文
posted @ 2009-11-09 02:48 史莱姆 阅读(198) 评论(0) 推荐(0)
摘要:当一个查看函数和一个变更函数名字相同,且参数个数与类型也相同时就有用了——即两者的不同之处仅在于一个有const另一个没有const。 const重载的一个常见应用是下标运算符。通常应该尽量使用标准模板容器,例如std::vector,但有时会需要在自己的类中支持下标运算符。一个经验法则是:下标运算符通常成对出现。 class Fred { ... };class MyFr... 阅读全文
posted @ 2009-11-09 02:48 史莱姆 阅读(345) 评论(0) 推荐(0)
摘要:static initialization order fiasco是对C++的一个非常微妙的并且常见的误解。不幸的是,错误发生在main()开始之前,很难检测到。 简而言之,假设你有存在于不同的源文件x.cpp 和y.cpp的两个静态对象x 和 y。再假定y对象的构造函数会调用x对象的某些方法。 就是这些。就这么简单。 结局是你完蛋不完蛋的机会是50%-50%。如果碰巧x.cpp的编辑单元先被初... 阅读全文
posted @ 2009-11-09 02:47 史莱姆 阅读(710) 评论(0) 推荐(0)
摘要:与构造函数反序:先被构造的,后被析构。 以下的例子中,析构的顺序是a[9], a[8], ..., a[1], a[0]: void userCode(){ Fred a[10]; // ...} 阅读全文
posted @ 2009-11-09 02:47 史莱姆 阅读(335) 评论(0) 推荐(0)
摘要:1. operatoroperator op= 直接作用于lvalue 并传回reference, 而 operator op 必须传回一个临时对象。如果你提供某个op 的标准版本 operator op, 同时请为他提供一份 assignment 版本 operator op=, 并且用后者为基础来实现前者, 同时也请保存 op 和 op= 之间的自然关系。使用以下准则来决定一个运算符是否为me... 阅读全文
posted @ 2009-11-09 02:45 史莱姆 阅读(174) 评论(0) 推荐(0)
摘要:1. 内存区域常量数据区const data, 编译期间就能确定的值, 在程序的整个生存期内, 区域中的数据都是可用并且只读。栈区stack 自动变量, 局部变量自由存储区free store和堆heap全局/静态区global/static,全局的或静态的变量和对象所占用的存储区域在程序启动的时候才被分配,而且直到程序开始执行的时候才被初始化。2. new如果你为某个类提供了任何类相关的new,... 阅读全文
posted @ 2009-11-09 02:42 史莱姆 阅读(189) 评论(0) 推荐(0)
摘要:1. virtual destructor让base class 的 destructor 为 virtual, 除非你确定不会有人企图通过一个pointer to base 去删除一个derived object。基类的析构函数要么是虚拟共有函数,要么是非虚拟的保护函数2. 绝不要改写虚函数的预设参数3. 尽量避免使用public 虚函数, 尽量以template method 取代之4. co... 阅读全文
posted @ 2009-11-09 02:41 史莱姆 阅读(344) 评论(0) 推荐(0)
摘要:1. Standard Exception Classes 1)Exceptions for language supportbad_allocbad_castbad_typeidbad_exception 2)Exceptions for the C++ standard library(logic_error)invalid_argumentlength_errorout_of_rangedo... 阅读全文
posted @ 2009-11-09 02:37 史莱姆 阅读(255) 评论(0) 推荐(0)
摘要:1. auto_ptrs1)auto_ptrs cannot share ownership2)auto_ptrs are not provided for arrays(auto_ptr 使用operator delete 语义,尽量使用vector 代替数组)3)auto_ptrs don't meet the requirements for container elements const... 阅读全文
posted @ 2009-11-09 02:34 史莱姆 阅读(239) 评论(0) 推荐(0)
摘要:Effective C++: 55 Specific Ways to Improve Your Programs and Designs (3rd Edition)More Effective C++: 35 New Ways to Improve Your Programs and DesignsEffective STL: 50 Specific Ways to Improve Your Us... 阅读全文
posted @ 2009-11-09 02:28 史莱姆 阅读(197) 评论(0) 推荐(0)