好好的一本《The C++ Programming Language》楞是讓他給譯成了一本天書。語句晦澀難懂不說,扭曲原意的地方也比比皆是。
今天無聊,拿出《C++ 程序設(shè)計語言》想看看迭代器traits。結(jié)果,沒看多少,就卡住了。P488文中一句“由于每個迭代器都定義了iterator_traits<iterator>…………”,我就納悶了,看前面說的,iterator_traits<iterator>應(yīng)該是一個專門設(shè)計出來用于萃取iterator信息的模板啊,設(shè)計iterator_traits的目的就是用它來取得迭代器的信息的,并使內(nèi)置的指針也可以像一個普通迭代器一樣使用。那為什么每個迭代器都要定義一個iterator_traits呢?不僅重復(fù)工作,也與iterator_traits的設(shè)計思想不符啊。
后來,找到該部分英文原文是:“Because iterator_traits<Iterator> is defined for every iterator,……”才搞明白,原文的意思是由于iterator_traits<iterator>是一個模板,它會為每個iterator特化出一個iterator_traits<iterator>的定義,其實的意思就是“因為iterator_traits模板會為每個迭代器定義iterator_traits<Iterator>,……”,而裘正好將主客體顛倒,原文的for的意思很明顯,而裘則將其當(dāng)作了by來翻譯,很懷疑裘的英語是否可以達(dá)到CET4的水平。
PS:《The C++ Programming Language》有侯捷譯的繁體版,不知大陸為什么不引進(jìn)。