(原創) 一個C++ Primer 4th中文版的嚴重中譯錯誤 (C/C++)
Abstract
侯捷老師的C++書籍,一直是陪伴大家學習C++最好的夥伴,主要是侯捷老師的深厚的C++功力與中文造詣,但在C++ Primer 4th中文版p.476,出現了一個嚴重的中譯錯誤,而且還連錯兩次。
Introduction
C++ Primer 4th雖然是由三位兩岸的學生一起翻譯初稿,最後由侯捷老師潤飾與定稿,所以仍算是侯捷老師的作品,整本書依然呈現侯捷老師的翻譯風格,我一直在網路上找不到這本書的勘誤表,所以不確定這個中譯是不是一個known issue,不過由於錯的很嚴重,對於初學者的觀念有很大的影響,所以還是在此跟大家分享。
在C++ Primer 4th中文版p.476的第二段
copy建構式(copy constructor)是一種特殊建構式,有一個唯一參數(通常是const),是個reference指向該class,當我們定義一個新物件並以同型物件做為初值時,copy建構式『未』被明確喚起。當我們向函式傳遞物件或從函式返回物件時,copy建構式『未』被隱寓喚起。
我特別將有問題的『未』加上引號,因為一加上『未』後,變成否定句,意義完全相反。
C++ Primer 4th 英文版p.476的原文如下
The copy constructor is a special constructor that has a single parameter that is a(usually const) reference to the class type. The copy constructor is used explicitly when we define a new object and initialize it from an object of the same type. It is used implicitly when we pass or return objects of that type to or from functions.
依我對copy constructor的認知,這應該是個肯定句,所以不應該有『未』,這會讓C++初學者完全誤解copy constructor。
網友volnet提供了另外一本C++ Primer 4th的翻譯如下:
复制构造函数(copy constructor)是一种特殊构造函数,具有单个形参,该形参(常用const修饰)是对该类类型的引用。当定义一个新对象并用一个同类型的对象对它进行初始化时,将显式使用复制构造函数。当将该类型的对象传递给函数或从函数返回该类型的对象时,将隐式使用复制构造函数。
這個翻譯就與我對copy constructor的認知相同了。
Conclusion
或許這只是個打字錯誤,將『會』打成『未』而以,不過由於意義完全相反,恐誤導C++初學者,所以特別提出來討論。