条款27:尽量少做转型动作 单一对象可能拥有一个以上的地址!…
条款20 协助编译器实现返回值优化 当重载运算符的时候,比如+ - * / 这类运算符,该函数返回的值一定是个右值(即不能是引用),那么执行一次运算的开销可能会在临时对象上调用多次构造函数和析构函数,这笔开销还是很大的.现在的新编译器已经可以对这种情况进行优化了,甚至优化到连开销都没有,只是有一定的适用范围.如果可以返回一个匿名的临时对象,并且利用构造函数来得到结果对象,那么就有可能被优化到零开销.注意,有名字的对象意味着返回值优化不可用. 假设有如下的代码: node a(); node b(…
条款一:视C++为一个语言联邦 为了理解C++,你必须认识其主要的次语言.幸运的是总共只有四个: C:C++是由C语言继承而来的,必然对C有很好的兼容性,这一部分主要包括C中的一些语言,库函数等.但当你以C++内的C成分工作时,高效编程守则照出C语言的局限:没有模板.没有异常.没有重载... Object-Oriented C++:这部分也就是C with Class所诉说的:classes(包括构造函数和析构函数).封装.继承.多态.virtual函数(动态绑定)....等等. Templat…
条款49:了解new-handler的行为 当operator new无法分配出内存会抛出异常std::bad_alloc 抛出异常前会反复调用用户自定义的new-handler函数直至成功分配内存 // 自定义new_handler函数 void outOfMem() { cerr << "Unable to satisfy request for memory" << endl; abort(); } //测试 int main() { set_new_ha…
条款01 : 视C++为一个语言联邦 C++ == C(C基本语法) + Object-Oriented C++(类,封装,继承,多态……) + Template C++(泛型编程) + STL(容器,迭代器,算法,函数对象) . 故而: C++高效编程守则视状况而变化,取决于你使用C++的哪一部分. 条款02 : 尽量以const,enum,inline 替换#define 1. #define 不被视为语言的一部分,其所定义的符号未被加入记号表(symbol table)内,宏内无法设置断点…
条款2.理解auto型别推导 对于auto的型别推导而言,其中大部分情况和模板型别推导是一模一样的.只有一种特例情况. 我们先针对auto和模板型别推导一致的情况进行讨论: //某变量采用auto来声明的时候,其中auto就扮演了模板中的T这个角色,而变量的型别修饰词则对应函数形参paramauto x = 27;//其中T对应auto.param也对应autoconst auto cx = x;//T对应auto,param对应const autoconst auto& rx = x; //p…
***************************************转载请注明出处:http://blog.csdn.net/lttree******************************************** 二.Constructors,Destructors and Assignment Operators Rule 11:Handle assignment to self in operator = 规则11:在 operator= 中处理"自我赋值"…
采用何种工具来查看型别推导结果,取决于你在软件开发过程的哪个阶段需要该信息.主要研究三个可能的阶段:撰写代码阶段.编译阶段.运行时阶段. IDE编译器 IDE中的代码编译器通常会在你将鼠标指针选停止某个程序实体,如变量.形参.函数等时,显示出该实体的型别.例如以下这段代码: ; auto x = theAnswer; auto y = &theAnswer; IDE编译器很可能会显示出,x的型别推导结果是int,而y则是const int*. 而让这种方法奏效,代码就多多少少要处于一种可编译状态…
条款05 : 了解C++默默编写并调用哪些函数 编译器可以暗自为class创建default构造函数.copy构造函数.copy assignment操作符,以及析构函数. 1. default构造函数和析构函数:主要是给编译器一个地方用来放置“藏身幕后”的代码,像是调用base classes和non-static成员变量的构造和析构函数:当我们显式声明了一个构造函数,编译器于是不再为我们的类创建default构造函数. 2. 如果你打算在一个“内含reference成员”的class内支持赋…
Effective C++算是看完了,但是并没有完全理解,也做不到记住所有,在此记录下55个条款及条款末的"请记住". 让自己习惯C++ 条款01:视C++为一个语言联邦 ① C ② Object-Oriented C++ ③ Template C++ ④ STL 条款02:尽量以const,enum,inline替换#define ① 对于单纯常量,最好以const对象或enums替换#define ② 对于形似函数的宏,最好改用inline函数替换#define 条款03:尽可能使…