《深度探索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)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.”,哈哈,意思很明显了,看来是侯捷老师的误译。