《深度探索C++对象模型》存疑

原创 2007年09月24日 22:28:00
《深度探索C++对象模型》是Standley B.Lippman大师的大作,中文版是侯捷老师翻译的,在译作中侯老师的质量是没得说。三年前对想拜读此书,由于种种原因未能如愿。最近在胡乱看完几本英文书籍之后(英文不好,看着太累)终于决定看几本中文书籍放松一下。
        比起英文版的书,看中文版的书真是惬意啊。之前有比较长时间的C++的经验,所以书前几章看着非常轻松,基本上都是已经知道的东西,不过看了一遍还是有收获的,最起码帮助我把这块的知识系统化。
        嗯,目前才看到第五章,根据侯老师的看法,后面可能并不轻松。到目前为止,有两个地方让我有点疑惑,本着“好读书,不求甚解”的想法,只罗列如下:
(1)P67,关于Named Return Value(NRV)。书中说到“这个程序的第一个版本不能实施NRV优化,因为test class 缺少一个copy constructor”;后面又提到“这个copy constructor的出现激活了C++编译器的NRV优化。” 从书中得知是copy constructor激活了NRV,但事实却是:没有激活了NRV的情况下,调用了copy constructor, 激活了反而不会调用copy constructor,费解!
        我也在网络上搜索了一下,没有找到十二分满意的答复,我自己的理解是:定义一个copy constructor是对编译器的一个暗示,暗示可以激活NRV,但具体优化操作高度依赖编译器。
(2)P195,关于“虚拟规格中const的存在”。“不把函数声明为const,意味着该函数不能获得一个const reference或const pointer”,不解。
        翻看了Standley B.Lippman老人家的另一本经典,《C++ Primer》(潘爱民老师翻译)的P518,关于const成员函数的论述如下:“只有被声明为const的成员函数才能被一个const类对象调用。关键字const 被放在成员函数的参数表和函数体之间。对于在类体之外定义的const成员函数,我们必须在它的定义和声明中同时指定关键字const。”,这个论述不能解释《深》里的那句话,于是找到英文原版,描述如下:“Not declaring a function const means the function cannot be called by a const reference or const pointer argument at least not without resorting to a casting away of the const.”,哈哈,意思很明显了,看来是侯捷老师的误译。

《深度探索c++对象模型》学习笔记

1、c++的布局和存取时间成本?封装并未给c++带来任何的空间或执行期的不良后果,c++在布局和存取时间上的主要额外负担由虚拟化引起。包括: 1)virtual function机制。用以支持一个有...
  • will130
  • will130
  • 2016年05月31日 15:48
  • 270

【C++】深度探索C++对象模型之执行期语意学

执行期语意学,即在程序执行时,编译器产生而外的指令调用,确保对象的构造,内存的释放,以及类型转换与临时对象的生成的安全进行。 一、对象的构造和析构 对于类对象的构造,我们应该尽量在需要使用时才进行...
  • zone_programming
  • zone_programming
  • 2015年12月27日 11:10
  • 526

深度探索c++对象模型(一)_关于对象

原博客地址:http://www.roading.org//develop/cpp/c对象面面观.html 学习C++应该看过不少关于C与C++的口水贴,以及关于各种对比C与C++效率比较的...
  • A_IIIIIIIII_A
  • A_IIIIIIIII_A
  • 2016年01月04日 11:31
  • 570

《深度探索c++对象模型》读书笔记(一)

本文以下内容为深度探索c++对象模型的笔记 深度探索c++对象模型是Stanley B Lippman的著作,对c++进行了较深层次的探讨。于我而言,这本书解答了我多年(半年)的疑惑: 虚函数是怎...
  • cover_s
  • cover_s
  • 2016年08月30日 15:51
  • 589

[读书笔记] 深入探索C++对象模型-第一章《关于对象》

最新在看深入探索C++对象模型(Inside C++ object model),看的同时针对一些之前没有留意或者理解不深的内容整理一下读书笔记,方便之后复习,也希望可以帮助到有同样疑惑的人。 下面是...
  • beyongwang
  • beyongwang
  • 2016年08月21日 21:14
  • 638

C++对象模型简介(二)——《深度探索C++对象模型》精简笔记

叁 多重继承 class A { public: A() {} virtual ~A() {} virtual int foo( ) { return val ...
  • yang_yulei
  • yang_yulei
  • 2013年03月30日 23:48
  • 12126

《深度探索C++对象模型》--2 构造函数语意学

上一篇: 《深度探索C++对象模型》--1 关于对象 1、default constructor的构造操作    C++standard:对于class X ,如果没有任何user-decla...
  • KUAILE123
  • KUAILE123
  • 2014年02月17日 20:40
  • 675

《深度探索C++对象模型》第六章 执行期语意学

new运算符和delete运算符 运算符new看似是一个简单的运算,比如:int *pi=new int(5);但是它实际由两个步骤完成: 1.通过适当的new运算符函数实体,配置所需的内...
  • m0_37316917
  • m0_37316917
  • 2017年03月11日 12:28
  • 157

深度探索C++对象模型之(八)

================================================ 如果喜欢,请关注:JellyThink | 思想的果冻 更多原创精彩博文,尽在www.jellyt...
  • vipygd
  • vipygd
  • 2013年01月26日 23:20
  • 905

深度探索C++对象模型-构造函数语义学

default constructor构建 default constructors在编译器需要的时候产生,区别于程序设计者的需要。以下程序进行说明: class A(public: int v;);...
  • isunn
  • isunn
  • 2015年04月19日 17:29
  • 878
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:《深度探索C++对象模型》存疑
举报原因:
原因补充:

(最多只允许输入30个字)