随笔分类 - C++对象模型
记录看书《深度探索C++对象模型》中的种种。
摘要:《深度探索C++对象模型》P67最下面说道:这个程序的第一个版本不能实施NRV优化,因为test class 缺少一个copy constructor.看了一下程序,这个NRV优化和copy constructor木有关系的说啊,所以为什么没有copy constructor就不能进行NRV优化了呢。搜了一下,结果很坑爹,就是 侯捷也不知道,Lippman也没有给出答案,而且这个也没有写入C++标准,各个编译器表现不一致。记录一下吧。主要参考:http://www.newsmth.net/bbsanc.php?path=%2Fgroups%2Fcomp.faq%2FCPlusPlus%2Fte
阅读全文
摘要:以下代码体现了书中所说的如下几个知识:1. 如果一个class没有任何constructor,但它含有一个member object, 而后者有default constructor,编译器需要为该class合成出一个default constructor。(P41)2. 如果 类中的default constructor已经被显示的定义出来,编译器没办法合成第二个,编译器会采取什么行动呢。编译器会扩张已存在的constructors, 在其中安插一些代码,使得 user code 被执行前,先调用必要的default constructors。(P42)3. 当class内含一个menber
阅读全文
摘要:关于这个问题,第一遍看的时候比较晕,不知道这个什么 bitwise copy是个什么东西,其实很简单,就是 位逐次拷贝(我靠,一句好犀利的废话)。额,具体来说呢,就是对 源类中的成员变量 中的每一位 都逐次 复制到 目标类中。具体的内容接着看。首先让我们看看这个概念是怎么出来的。书中第50页的时候说到:Default constructors 和 copy constructors 在 必要的时候 才由编译器产生出来这个句子中的“必要”意指当class不展现bitwise copy semantics时。这段话的意思呢,应该是这么个意思: 如果class中出现了bitwise copy sem
阅读全文
摘要:和 成员变量 的情况一样,如果类中有基类,那么调用 基类构造 函数的顺序和和声明的顺序一致。代码如下:class A1{public: A1(){cout<<"A1 construction"<<endl;}};class A2{public: A2(){cout<<"A2 construction"<<endl;}};class A3: public A1, public A2//注意,这里为声明的顺序{public: A3(){ A2::A2(); A1::A1(); cout<<"
阅读全文
摘要:书中第43页中有如下描述:如果有多个class member objects 都要求constructor 初始化操作,将如何?C++语言要求以 “memeber objects 在class中的声明顺序”来调用各个constructors。也就是说 一个类中的 数据成员 的声明顺序决定了,他们的构造顺序。具体代码如下:class A1{public: A1(){cout<<"A1 construction"<<endl;}};class A2{public: A2(){cout<<"A2 construction"&
阅读全文

浙公网安备 33010602011771号