2016-09-26 102 views
1

我希望通過我在那裏遇到了以下if聲明爲`if`聲明

if (!(foo == bar)){ 
    // lots of code here 
} 

一些舊代碼奇怪的符號是什麼寫這在

if (foo != bar){ 
} 

如果它的優勢相關的,代碼庫是C++。

+0

歡迎來到SO。該語言總是*相關的。這是民間現場如何回答他們的問題。 – Bathsheba

+1

在一個糟糕的設計中,'Foo'可以是一個類== ==操作符被重載,但不是'!='一個...... – Jepessen

+0

是的,我也這麼認爲。但這是一項新工作,並不認爲我可以改變太多。 –

回答

6

它們應該是等價的,對於普通的舊數據類型它們當然是,但如果作者(非傳統地)爲==提供了重載操作符而不是!=,那麼寫這個的第二種方法將不可用。

爲了增強可讀性不過,我想我寧願看到

if (foo == bar){ 
    // do nothing 
} else { 
    // lots of code here 
} 

儘管所有的最清晰的方式是調整代碼庫提供!=運營商,併爲您採納你的第二個方法寫這個。

+5

一個非常詳細的無所作爲的方式(並不真正提高可讀性) –

+0

我確實將該部分限定爲基於觀點的部分。 '(!(foo == bar))'對我來說看起來像一種「味道」。 – Bathsheba

+4

因爲'!='過載不存在,所以我寧願看'if(!(foo == bar))''。空'如果'塊是我的氣味:) –

2

類型(模板參數)的要求(概念)可能包括EqualityComparable,但不包括NotEqualityComparable(它不存在作爲http://en.cppreference.com/w/cpp/concept中列出的庫概念)。

LessThanComparable的概念是類似的:C++算法不需要比概念更大的(它是多餘的)。

+1

是的。這是關於這樣一個測試的唯一*好的原因(儘管如此,我認爲改變模板的要求以增加InequalityComparable通常是正確的選擇。 –