自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

hallå的博客

我可以选择放弃,但是不会放弃选择。

  • 博客(15)
  • 资源 (2)
  • 收藏
  • 关注

原创 第六章 执行期语意学(Runtime Semantics)

想象下简单的式子:if(yy == xx.getValue()) ...//xx 和 yy的定义X xx;Y yy;//Y定义class Y{public: Y(); ~Y(); bool operator ==(const Y&) const; //...};//X定义class X{public: X(); ~X(); operato...

2018-11-30 07:14:31 215

原创 5.5 析构语意学(Semantics of Destruction)

如果class没有定义destructor,那么只有在class内含的member object(或class自己的base class)有拥有destructor时,编译器才会自动合成一个出来。否则,destructor被视为不需要,也就不需要合成(当然更不需要调用)。例如,Point,默认情况下并没有被编译器合成一个destructor——甚至虽然它拥有一个virtual function...

2018-11-30 06:55:08 167

原创 5.4 对象的效能(Object Efficiency)

以下的效率测试中,对象构造和拷贝所需的成本是以Point3d class声明为基础,从简单形式逐渐到复杂形式,包括Plain OI' Data、抽象数据类型(ADT)、单一继承、多重继承、虚拟继承。以下是测试的主角:Point3d lots_of_copies(Point3d a,Point3d b){ Point3d pC = a; pC = b;//(1) b = a; //...

2018-11-28 07:17:21 180

原创 5.3 对象复制语意学(Object Copy Semantics)

当我们设计一个class,并以一个class object赋值给另一个class object时,我们就用到了拷贝复制操作,我们可以选择默认的浅拷贝,也可以自己提供一个explicit copy assignment operator,或者显示的拒绝把一个class object赋值给另一个class object(将copy assignment operator声明为private)。为了...

2018-11-27 07:34:15 204

原创 5.2 继承体系下的对象构造

当我们定义一个object如下:T object;如果T有一个constructor(不论是由user提供还是编译器合成的),它会被调用。Constructor可能内含大量的隐藏码,因为编译器会扩充每一个constructor,扩充视class T的继承体系而定。一般编译器所做的扩充操作大约如下:记录在member initialization list中的data member...

2018-11-26 07:29:40 171

原创 5.1 “无继承”情况下的对象构造

考虑如下的程序片段:Point global; //1Point foobar(){ Point local; //2 Point* head = new Point; //3 *head = local; //stuff delete heap; //4 return local;}上述表现出三种不用的对象产生方式:global对象、local对象和heap对象。...

2018-11-21 07:32:58 183

原创 第五章 构造、析构、拷贝语义学

如下一个abstract base class声明:class Abstract_base{public: virtual ~Abstract_base() = 0; virtual void interface() const = 0; virtual const char* mumble() const {return _mumble;}protected: char*...

2018-11-20 06:45:18 169

原创 4.5 Inline Functions

一般而言,处理一个inline函数,有两个阶段:分析函数定义,以决定函数的“intrinsic inline ability”(本质的inline能力)。如果函数因其复杂度,或因其构建问题,被判断不可成为inline,它会被转为一个static函数,并在“被编译模块”内产生对函数的定义。真正的inline函数扩展操作是在调用那一点上。这会带来参数的求值操作(evaluation)以及临时...

2018-11-16 07:00:13 186

原创 4.4 指向Member Function 的指针

取一个nonstatic data member的地址,得到的结果该是member在class布局中的bytes位置(再加1);它是一个不完整的值,它需要被绑定在某个class object的地址上,才能够被存取。取一个nonstatic data function地址,如果该函数是nonvirtual,得到的结果是它在内存中真正的地址。这值也是不完整的,也需要被绑定某个class objec...

2018-11-15 07:01:10 202

原创 4.3 函数的效能

在如下这组测试中,在不同编译器计算两个3D点,其中用到了一个nonmember friend function,一个member function,以及一个virtual member function,兵器virtual member function分别在单一、虚拟、多重继承三种情况下执行。如下是nonmember function:void cross_product(const Po...

2018-11-13 06:44:04 264

原创 4.2 Virtual Member Functions(虚拟成员函数)

单一继承下的Virtual Functions为了支持virtual function机制,必须首先能够对于多态对象有某种形式的“执行期类型判断法(runtime type resolution)”。如下的调用操作将需要ptr在执行期的某些相关信息,如此一来才能找到并调用z()的适当实例:ptr->z();或许最直接了当但是成本最高的解决方法就是把必要的信息加在ptr身上。在这...

2018-11-09 07:20:32 412

原创 4.1 Member 的各种调用方式

C++支持三种类型的member functions:static、nonstatic和virtual,每一种被调用的方式都是不同的。确定一个类成员函数不是为static:1、它能直接存取nonstatic数据;2、它被声明为const。static member functions不可能做到这两点。Nonstatic Member Functions(非静态成员函数)C++的设计准则之一...

2018-11-06 07:27:20 809

原创 3.6 指向Data Members的指针

指向Data Members的指针有两个用处:第一,可以调查class members的底层布局;第二。可以用来决定class 中的accesss section的顺序。考虑如下的Point3d的声明。其中有一个virtual function,一个static data member,以及三个坐标值:class Point3d{public: virtual Point3d();...

2018-11-02 10:43:24 444

原创 3.5 对象成员的效率(Object Member Efficiency)

以下对于局部变量、局部数组、C struct 和C++ 封装的函数进行测试,下列是两种编译器列出的各种结果:上述所显示的重点在于,如果把优化打开,“封装”就不会带来执行期的效率成本。使用inline存取函数亦然。在下一个测试中,使用单一继承、虚拟继承(单层)和虚拟继承(双层)的测试结果:class Point1d{...}; //维护xclass Point2d: public...

2018-11-01 07:35:18 233

原创 3.4 “继承”与Data Member

在C++继承模型中,一个derived class object 所表现出来的的东西,是其自己的members加上其base classes members的总和。至于derived class members和base classes members排列顺序并没在C++ Standard中强制规定:理论上编译器可以自由安排。在大部分编译器,base classes members在前面,但属于v...

2018-11-01 06:58:24 220

c++并发编程实战(C++11)pdf 高清

《C++并发编程实战》是一本基于C++11新标准的并发和多线程编程深度指南。内容包括从std::thread、std::mutex、std::future和std::async等基础类的使用,到内存模型和原子操作、基于锁和锁数据结构的构建,再扩展到并行算法、线程管理,最后还介绍了多线程代码的测试工作。本书的附录部分还对C++11新语言特性中与多线程相关的项目进行了简要的介绍,并提供了C++11线程库的完整参考。 ---------------------

2018-12-17

高质量C++/C编程指南

林锐,国内知名的软件工程专家和研发管理咨询师。西安电子科技大学硕士,浙江大学计算机系博士。2000年7月加入上海贝尔有限公司,从事软件工程和CMM的研究推广工作。2003年7月当选为Alcatel集团技术专家。2004年初创建上海漫索计算机科技有限公司(http://www.chinaspis.com),致力于创建适合国内IT企业需求的研发管理解决方案,包括方法论和软件产品。已出版著作七部。

2018-12-17

空空如也

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

TA关注的人

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