自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(23)
  • 资源 (1)
  • 收藏
  • 关注

原创 【more effective c++读书笔记】【第4章】效率(2)

条款19:了解临时对象的来源1、C++真正的临时对象是不可见的,临时对象通常发生于两种情况:一是当隐式类型转换被施行起来使函数调用能够成功;二是当函数返回对象时。2、只有当对象通过传值方式传递对象或当对象被传递给一个常量引用参数时,才会发生类型转换。如果对象被传递一个非常量引用参数,并不会发生类型转换。例子:#include#include#includeusing name

2015-08-31 10:08:02 394

原创 【more effective c++读书笔记】【第4章】效率(1)

条款16:谨记80-20法则80-20法则说:一个程序80%的资源用于20%的代码身上。80%的执行时间花在大约20%的代码上;80%的内存被大约20%的代码使用;80%的磁盘访问动作由20%的代码执行;80%的维护力气化在了20%的代码上。软件的整体性能几乎总是由其构成要素的一小部分决定。条款17:考虑使用lazyevaluation(缓式评估)lazy evaluati

2015-08-30 15:45:02 364

原创 【more effective c++读书笔记】【第3章】异常(2)

条款12:了解“抛出一个exception”与“传递一个参数”或“调用一个虚函数”之间的差异2、例子:istream operator>>(istream& s, Widget& w);void passAndThrowWidget(){ Widget localWidget; cin >> localWidget; throw localWidget;}当localWidge

2015-08-29 14:14:17 497

原创 【more effective c++读书笔记】【第3章】异常(1)

条款9:利用Destructor避免泄漏资源1、异常无法被忽略:如果一个函数利用“设定状态变量”的方式或是利用“返回错误码”的方式发出一个异常信号,无法保证此函数的调用者会检查那个变量或检验那个错误码。于是程序的执行可能会一直继续下去,远离错误发生地点。但是如果函数以抛出expcetions的方式发出异常信号,而该exception未被捕捉,程序的执行便会立刻中止。2、例子:

2015-08-28 09:43:06 314

原创 【more effective c++读书笔记】【第2章】操作符(2)

条款7:千万不要重载&&,|| 和, 操作符1、C++对于“真假值表达式”采用“骤死式”评估方式:一旦表达式的真假值确定,即使表达式中还有部分尚未检验,整个评估工作仍告结束。例子:char* p;...if ((p != 0) && (strlen(p) > 10))...不用担心调用strlen时p是否为null指针,因为如果p != 0是否定的,strlen就绝

2015-08-27 14:38:57 344

原创 【more effective c++读书笔记】【第2章】操作符(1)

条款5:对定制的“类型转换函数”保持警觉1、两种函数允许编译器执行隐式转换:单自变量constructor 和隐式类型转换操作符。单自变量constructor是指能够以单一自变量成功调用的constructor,这样的constructor可能声明拥有单一参数,也可能拥有多个参数,并且除了第一参数之外都有默认值。隐式类型转换操作符,是一个拥有奇怪名称的member function:关键词o

2015-08-26 09:44:27 461

原创 【more effective c++读书笔记】【第1章】基础议题(2)

条款3:绝对不要以多态方式处理数组1、继承的最重要性质之一就是,你可以通过指向基类的指针或者引用来操作派生类对象。但是如果你通过基类指针或者引用来操作派生类所形成的数组,它几乎绝不会按你预期般地运作。例子:#includeusing namespace std;class Base{public: Base(int i=1){ ib = i; } friend ostrea

2015-08-25 14:38:09 376

原创 【more effective c++读书笔记】【第1章】基础议题(1)

条款1:仔细区别pointers和references1、pointers和references之间的区别是:a、没有所谓的null reference,一个reference必须总代表某个对象。pointer可以不指向任何对象。b、pointer可以被重新赋值,指向另一个对象,reference却总是指向它最初获得的那个对象。例子:#include#includeusin

2015-08-24 13:41:02 414

原创 【effective c++读书笔记】【第9章】杂项讨论

条款53:不要轻忽编译器的警告警告信息天生和编译器相依,不同的编译器有不同的警告标准。所以草率编程后依赖编译器为你指出错误,并不可取。请记住:严肃对待编译器发出的警告信息。努力在你i的编译器的最高(最严苛)警告级别下争取“无任何警告”的荣誉。不要过度依赖编译器的报警能力,因为不同的编译器对待事情的态度并不相同。一旦移植到另一个编译器上,你原本依赖的警告信息有可能消失。

2015-08-20 13:51:39 305

原创 【effective c++读书笔记】【第8章】定制new和delete(2)

条款50:了解new和delete的合理替换时机有人会想要替换掉编译器提供的operator new或operator delete,以下是几个理由:a、用来检测运用上的错误。编程过程中会出现各种错误。这些错误导致内存泄露(memory leaks)、不确定行为产生、overruns(写入点在分配区块尾端之后)、underruns(写入点在分配区块尾端之前)等的发生。定制的operator

2015-08-19 09:57:05 440

原创 【effective c++读书笔记】【第8章】定制new和delete(1)

条款49:了解new-handler的行为1、当operator new无法满足某一内存分配需求时,它会抛出异常,以前会返回null指针。当operator new抛出异常以反映一个未获满足的内存需求之前,它会先调用一个客户指定的错误处理函数,一个所谓的new-handler。为了指定这个“用以处理内存不足”的函数,客户必须调用set_new_handler,它是声明于的一个标准程序库函数:

2015-08-18 15:01:19 373

原创 【effective c++读书笔记】【第7章】模板和泛型编程(3)

条款46:需要类型转换时请为模板定义非成员函数对条款24的例子进行模板化:#includeusing namespace std;templateclass Rational{public: Rational(const T& n = 0, const T& d = 1) :numerator(n), denominator(d){}//构造函数刻意不为explicit,为了隐

2015-08-17 13:24:04 583

原创 【effective c++读书笔记】【第7章】模板和泛型编程(2)

条款44:将与参数无关的代码抽离templatestemplate是节省时间和避免重复代码的一个奇妙方法。class template的成员函数只有在被使用时才被暗中具现化。但是如果不小心,使用templates可能导致代码膨胀(code bloat):其二进制代码带着重复(或几乎重复)的代码、数据、或两者。其结果可能源码看起来合身整齐,但目标码却不是那么回事。假设你想为固定尺寸的正方矩阵

2015-08-16 13:34:26 420

原创 【effective c++读书笔记】【第7章】模板和泛型编程(1)

条款41:了解隐式接口和编译期多态1、模板的编译期多态例子:#includeusing namespace std;class ClassA{public: ClassA(size_t s) :size(s){} size_t getSize() const{ return size; }private: size_t size;};class ClassB{pu

2015-08-15 20:36:47 441

原创 【effective c++读书笔记】【第6章】继承与面向对象设计(4)

条款39:明智而审慎的使用private继承1、如果classes之间的继承关系是private,编译器不会自动将一个derived class对象转换为一个base class对象。例子:#include#includeusing namespace std;class Person{protected: string name;};class Student :pr

2015-08-14 14:07:09 358

原创 【effective c++读书笔记】【第6章】继承与面向对象设计(3)

条款36:绝不重新定义继承而来的non-virtual函数1、例子#includeusing namespace std;class Base{public: void mf(){ cout << "Base::mf()" << endl; }};class Derived :public Base{public: void mf(){ cout << "Derived:

2015-08-13 14:20:26 388

原创 【effective c++读书笔记】【第6章】继承与面向对象设计(2)

条款35:考虑virtual函数以外的其他选择假设你在开发一款游戏,你打算为游戏内的人物设计一个继承体系。每个人物都有自己的健康状态。你能马上想到下面这个设计:class GameCharacter{public: virtual int healthValue()const;};有没有其他替代方案呢?答案是肯定的。1、藉由Non-Virtual Interface手法

2015-08-12 16:24:09 347

原创 【effective c++读书笔记】【第6章】继承与面向对象设计(1)

条款32:确定你的public继承塑模出is-a关系1、以C++进行面向对象编程,最重要一个规则是:public inheritance(公开继承)意味着“is-a”(是一种)的关系。如果令class D(“Derived”)以public形式继承class B(“Base”),便告诉C++编译器(及代码读者)说,每一个类型为D的对象同时也是一个类型为B的对象反之不成立。B比D表现出更一般化的

2015-08-11 15:18:12 349

原创 【effective c++读书笔记】【第5章】实现(2)

条款29:为“异常安全”而努力是值得的1、在异常抛出时,带有异常安全性的函数会:a、不泄露任何资源b、不允许数据败坏2、异常安全函数(Exception-safefunctions)提供以下三个保证之一:a、基本承诺:如果异常被抛出,程序内的任何事物仍然保持在有效状态下。没有任何对象或数据结构会因此而败坏,所有对象都处于一种内部前后一致的状态。然而程序的现实状态不可预料。b

2015-08-05 16:16:53 393

原创 【effective c++读书笔记】【第5章】实现(1)

条款26:尽可能延后变量定义式的出现时间1、只要你定义了一个变量而其类型带有一个构造函数或析构函数,那么当程序的控制流到达这个变量定义式时,你便得承受构造成本;当这个变量离开其作用域时,你便得承受析构成本。即使这个变量最终并为被使用,仍需耗费这些成本,所以应该尽量避免这种情形。例子:std::string encryptPassword(const std::string& passw

2015-08-04 20:35:25 449

原创 【effective c++读书笔记】【第4章】设计与声明(2)

条款22:将成员变量声明为private1、 如果成员变量不是public,客户唯一能够访问对象的办法就是通过成员函数。如果public接口内的每样东西都是函数,客户就不需要再打算访问class成员时迷惑地试着记住是否该使用小括号。2、使用函数可以让你对成员变量的处理有更精确的控制。如果你令成员变量为public,每个人都可以读写它,但如果你以函数取得或设定其值,你就可以出现“不准访问”、

2015-08-03 19:41:24 467

原创 【effective c++读书笔记】【第4章】设计与声明(1)

条款18:让接口容易被正确使用,不容易被误用1、许多客户端错误可以因为导入新类型而获得预防。在防范“不值得拥有的代码”上,类型系统是你的主要同盟国。2、预防客户错误的另一个办法是,限制类型内什么事可做,什么事不能做。常见的限制是加上const。3、除非有好理由,否则应该尽量令你的types的行为与内置types一致。4、tr1::shared_ptr有一个特别好的性质是:它会自动使

2015-08-02 21:55:00 420

原创 【effective c++读书笔记】【第3章】资源管理

条款13:以对象管理资源1、例子:#includeusing namespace std;class Test{public: Test(){ cout << "Test构造" << endl; } ~Test(){ cout << "Test析构" << endl; }};Test* createTest(){ return new Test();}void f()

2015-08-01 15:53:55 415

DOS教程.rar

DOS命令,教你怎么使用dos命令。在汇编中要学到,所以就上传了,方便大家学习

2012-09-21

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除