看到构造语意的其中一节“继承体系下的对象构造”(5.2节)的最后,看来原文,发现侯杰的翻译有问题,怪不得读起来不顺. What about when providing an argument for a base class constructor? Is it still physically safe to invoke a virtual function of the class within its constructor's member initialization list?…
百度云及其他网盘下载地址:点我 作者简介 Stanley B. Lippman is Architect with the Visual C++ development team at Microsoft. Previously, he served as a Distinguished Consultant at the Jet Propulsion Laboratories (JPL). Stan spent more than twelve years at Bell Laboratori…
一. 关于对象 1.内联函数:能够除去函数调用的开支,每一处内联函数的调用都是代码的复制.这是一种空间换取时间的做法,若函数代码量大或者有循环的情况下,不宜内联(这件事有些编译器会自动帮你做).在类中若直接将函数实现写在类体内,默认内联.如果函数因其复杂度或构建等问题被判断为不能成为inline函数,它将被转化为一个static函数.如果一个inline函数被调用太多次的话,会产生大量的扩展码,使程序大小暴涨. 2.C++对象模型: 3.组合,而非继承是把C和C++结合的唯一可行方法. 4.C+…
转载:http://dsqiu.iteye.com/blog/1669614 第一章 关于对象 使用class封装之后的布局成本: class并没有增加成本,data members直接内含在每一个class object之中,就像C struct一样.而member functions虽然被包含在class的声明之内,但是不出现在Object之中.每一个non-inline function 只会产生一个函数实体.至于inline function则会在每一个调用使用的地方产生一个函数实体(在…
前言 1.Foundation项目是一个定义大系统开发模型的项目,又叫Grail. 2.Grail中编译器被分为:parser(语法分析)->type checking -> simplification -> code generation simplification 用于转换程序的内部表现,我的理解其实是预处理,有3种转换: a.与编译器相关的转换, 对于表达式:fct()的解释可能有2种:(1)调用fct函数.(2)对象fct重载了函数调用"()"操作符号.当…
============================================================================5-0. 一般而言,class 的data member 应该被初始化,并且只在constructor中是在class 的其他member functions 中指定初值.其他任何操作都将破坏封装性质,是class 的维护和修改更加困难. 图片5-0: (1)纯虚拟函数的存在注:编译器不会在扩展derived class 的destructor时…
首先定义一个类X class X { public: X(); X(const X& x); virtual ~X(); virtual foo(); } 再来一段代码: X foobar() { X xx; X *px = new X; //foo 是一个虚函数 xx.foo(); px->foo(); delete px; return xx; }; 以上这个函数中包括了虚函数调用,构造,NRV优化,虚析构等部分.以下代码展示了用C代码描述样子: //为了避免多次复制,直接将接收返回值的…
object Lessons 1.C++中布局以及存取时间上的的额外负担是由virtual引起的:virtual function.virtual base class.或是由于多继承引起的. 2.C++中有2种class membe:static,non-staticr和三种member function:static,non-static,virtual.不同的对象模型在内 存中对这些元素有不同的表现方式. a.简单对象模型 以solt方式保存对象成员. b.表格驱动对象模型 每个对象都是2…
============================================================================4-1. Member 的各种调用方式静态成员函数(static member functions,不属于对象,没有this指针)不能直接存取Nonstatic数据:同时不能被声明为const(const用于后置修饰函数时只用于限定成员函数,意味着将被修饰的成员函数的隐式参数——this指针由原来的Class* const变为const Clas…
============================================================================3-0. 类所占的内存大小受到三个因素的影响:(1)语言本身所造成的额外负担(Virtual base classes):(2)编译器对于特殊情况所提供的优化处理(空基类优化):(3)Alignment的限制(对齐):注:Empty Virtual base class提供一个Virtual interface,没有定义任何数据,某些编译器对此提…