好好的一本《The C++ Programming Language》楞是让他给译成了一本天书。语句晦涩难懂不说,扭曲原意的地方也比比皆是。
今天无聊,拿出《C++ 程序设计语言》想看看迭代器traits。结果,没看多少,就卡住了。P488文中一句“由于每个迭代器都定义了iterator_traits<iterator>…………”,我就纳闷了,看前面说的,iterator_traits<iterator>应该是一个专门设计出来用于萃取iterator信息的模板啊,设计iterator_traits的目的就是用它来取得迭代器的信息的,并使内置的指针也可以像一个普通迭代器一样使用。那为什么每个迭代器都要定义一个iterator_traits呢?不仅重复工作,也与iterator_traits的设计思想不符啊。
后来,找到该部分英文原文是:“Because iterator_traits<Iterator> is defined for every iterator,……”才搞明白,原文的意思是由于iterator_traits<iterator>是一个模板,它会为每个iterator特化出一个iterator_traits<iterator>的定义,其实的意思就是“因为iterator_traits模板会为每个迭代器定义iterator_traits<Iterator>,……”,而裘正好将主客体颠倒,原文的for的意思很明显,而裘则将其当作了by来翻译,很怀疑裘的英语是否可以达到CET4的水平。
PS:《The C++ Programming Language》有侯捷译的繁体版,不知大陆为什么不引进。