Re: 常見的 C++ 錯誤觀點

看板C_and_CPP (C/C++)作者 (Alien)時間16年前 (2009/03/09 10:54), 編輯推噓0(002)
留言2則, 1人參與, 最新討論串3/4 (看更多)
※ 引述《yoco315 (眠月)》之銘言: : 我也跳下來玩,不過我 C++ 很弱,請打小力一點 <(_ _)> [43] : 2. C++程式不易讀 : 這是十年前 Java 用來打 C++ 的論點, : Java 當初真的喊很大聲,讓我們複習一下 Java 當初講了什麼: : 我們不支援 operator overloading,因為你不能保證使用者不會亂用, : 誰知道他幫 Integer 實作的 operator + 裡面是不是減法呢? : 是不是很好笑?講得好像 Java 的 compiler 會檢查出下面這種東西然後OB擋掉一樣 : class Integer { : int value = 0 ; : Integer add ( rhs ) { : Integer result = new Integer(this) ; : result.value -= rhs.value ; : } : } : 不好意思,不會擋掉,編譯器會很開心把他編出來。 : 看到沒有?只要舉的例子夠奇怪,你什麼都能證明,開玩笑的, : 是不管你用什麼語言,你都沒辦法阻止腦殘的程式設計師幹出蠢事, : 而且 d = ( a + b ) * ( c + d ) 就是比 d = a.add(b).mul(c.add(d)) 好讀, : 這點不是我自己在講的,有個極端反對 operator overloading 的語言也贊成我, : 怎麼說?因為 Java 下一版也要內建 BigNumber 的 operator overloading 了 ~_~" : 連抱持這個觀點到極限的 Java 都棄守了,C# 也早就不鳥 Java 那套說詞了。 : 所以不要再自己用手打一堆自己平常寫程式都不可能寫出的爛 code 來當作例子, : 舉那些例子唯一能證明的就是舉例的人自己會寫出這麼爛的 code,不是別人。 : 讓我這樣說吧:你的 C++ 可能不好讀,別人的可不是。 [43] 為這裡作一點補充. Java 並不是不支援 operator overloading, 而是 不能自訂 operator overloading. Java 由 JDK 1.0 開始就有 operator overloading 的使用了, 就是 String 的 + 和 += 所以單是加上內置的 Big Number operator overloading 其實和以前的立場沒有分別. 雖然我覺得 Java 為了怕人家亂用而把自訂 operator overloading 捨棄是矯枉過正 (如你的例子一樣, 根本 沒有幫到什麼忙), 但的確從經驗所見, 有不少人利用了 operator overload 做到了很 magical (某程度上也很 方便) 的 code, 而這類的 code 看起來的確不直覺. (我自己是希望Java 可以有自訂 operator overloading 啦.. :P ) alien -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 202.155.236.82

03/09 16:45, , 1F
其實我本身很少用 C++ 的這項機制,特別是 operator[],
03/09 16:45, 1F

03/09 16:46, , 2F
很多時候我寧願用函式代替它。
03/09 16:46, 2F
文章代碼(AID): #19j8JDhA (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 4 篇):
文章代碼(AID): #19j8JDhA (C_and_CPP)