2016-06-29 4 views
4

C++で巨大なコードベースを調べています。著者は平等をチェックするために0==i構文を使用しました。私はかなり長い間C++でコーディングしてきました。私は常にi==0の構文を使用しています。C++の等価性をチェックする2つの方法の相違点== 0 vs 0 == i

前者は後者に比べて利点がありますか?それとも、それは単に個人的な好みですか?

+4

後者は '0 = i'のようなタイプミスがコンパイルエラーで大きな利点があります:あなたはoperator==をオーバーロードしている場合

しかし、その後、0 == iは、エラーの可能性があります。 –

+4

2番目の等号を忘れた場合、前者はコンパイラエラーを生成します。 '0 = i'はコンパイルされず、' i = 0'がコンパイルします。 – tkausl

+0

コメント欄に2つの回答があります。どうして? –

答えて

10

前者には、プログラマーが誤って等号を忘れないようにするという利点があります。

if (i = 0) 

上記合法であり、ゼロにiを設定し、(ゼロが偽であると考えられるため)偽です。

if (0 = i) 

上記はすべての状況で違法です。

今日、ほとんどのコンパイラはif (i = 0)について警告しますが、必須ではなく、必ずしもそうではありませんでした。

11

0==iと呼ばれ、「yoda条件」と呼ばれます。これは確かに個人的な好みですが、利点があります。

現代の技術を欠いていた神秘的な騎士たちによって暗黒時代に使用され、間違って0=iと書かれたときにそれを伝えました。

コンパイラは偶発的な0=iを拒否しますが、偶発的なi=0を受け入れます。

1672現代のシャーマンの戦争は、また(そのの目を他のシャーマン(も妖精、エルフと人間)に理にかなって、コードを書き、代わりにこの千年で書かれたコンパイラを使用しようとした後、この規則は、段階的に廃止されました)を使用してください。

+0

私は物事を説明するあなたのやり方を高く評価しますが、現代のコンパイラがこれを取り除いているとは思えません。私は昨年、このタイプミスをしました。これをデバッグするのは簡単ではありませんでした。私は正確なコンパイラのバージョンを覚えていませんが、それは古いものではありません。 :D –

+2

Bull!偉大な、偉大な、偉大な偉大な叔母は1850年代に最近それを使用! – user4581301

+2

@SonuMishra場合によっては警告レベルを上げて取得する必要がありますが、通常はそこにあります。 – user4581301

3

説明されているように、単純な整数の場合、0 == iはタイプミスのリスクを最小限に抑えます。 (!)

class X 
{ 
public: 
    X(int x) : _x(x) {}; 
    bool operator==(int y) { return _x == y; } 
private: 
    int _x; 
}; 

.... 

X x(0); 
if (x == 0) // OK 
    ; 
if (0 == x) // error 
    ; 
関連する問題