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

本文分享了作者阅读《深度探索C++对象模型》的心得体会,包括对比英文原著后的轻松感,以及对书中两个概念的疑惑:Named Return Value优化机制和虚拟规格中const的作用。
《深度探索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.”,哈哈,意思很明显了,看来是侯捷老师的误译。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值