2005-10-7 19:10:00
读者
:
-
这是本好书,但中文翻译水平太.............
|
我有时觉得有些句段特别拗口,我想自己可能是初学者,看不懂很正常,但当我用英文版对照阅读时发现很多时候并不是我不理解. 我随便举几个例子: ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 13.4.3 非自动继承的函数 倒数第二段: 在derived 中,operator=( ) 也被综合为新函数,使用成员函数赋值,因为这个函数在新类中不显式地写出。 看得莫名奇妙,什么叫'成员函数赋值'? 一看英文版,原来是'memberwise assignment',再用此搜索一下,可以找到相应的解释,如果用'成员函数赋值'搜索整个中文版文件,你会发现就这一处有,怎么回事?中文版里难道没有吗,找到相应章节11.5末尾,原来这里翻译为'成员赋值'!! 我怀疑翻译者根本没有通读整个文章并深该理解它.很显然它没有将13.4.3中的memberwise assignment当成是一个知识点,随意翻译了一下(很不幸:这时候翻译者想用的是另一个词,哈哈!). 我觉得对这种有专门意思的语句根本就不应该翻译成中文,直接引用最好. ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 13.5.2 专门化 .... 这不仅乏味,而且不安全—我们能让这个指针指向所希望的任何地方 原文是: it's unsafe--you could cast the pointer to anything you want. 很显然这个返回的指针是不能'指向所希望的任何地方'的. 翻译者居然对'cast'一词的理解严重错误.誰都知道它是'映射'的意思,或说白点就是'强制转换'. ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 15.3.1 你可以想象在一些混合型中编译器实际支持两个名字和参数类型。 * 头文件 甚至是在定义非内联函数时,模板的头文件中也会放置所有的声明和定义。这似乎违背了通常的头文件规则:“不要在分配存储空间前放置任何东西”,这条规则是为了防止在连接时的多重定义错误。 原文是: You can imagine that the compiler does indeed carry both the name and the argument type(s) in some mangled form. 本来很好理解的话被翻译成了天书! 我不知道它的'两个'是从哪里来的('both'吗,呵呵,天啊),还有它居然把in some mangled form用来修饰compiler,称为混合型编译器,我的天! * header file Even if you create non-inline function definitions, you'll generally want to put all declarations and definitions for a template in a header file. This may seem to violate the normal header file rule of 'Don't put in anything that allocates storage' to prevent multiple definition errors at link time,
*头文件 即使创建一个非内连函数定义,你通常想将template的所有声明和定义放入头文件中. 这看起来似乎与头文件规则相起违背:'不要将占用内存的东西放进来'(这样做是为了在连接时避免重复定义的错误). 乍一看,这是什么规则?虽然我们可能自己悟出,但这种低级错误让我汗颜! 感觉翻译者英文语法没过关. ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 还有很多.这是我的一点拙见. 我建议将本书作为英文版的参考书,实在看不懂时还可以参考一下.
2005.10.7 by Gene
|
发表评论
我赞同(0人)
我反对(0人) 回复评论
|
|
正在读取本评论的讨论,请稍侯……
|
|
|