2012-05-02 8 views
7

可能性の重複:「!!」を使用していますC/C++の良い習慣で、それは一般的ですか?


Double Negation in C++ code

は、私の知る限りでは、ないC/C++ブックのチュートリアルやマニュアルは、この技術を言及。おそらくそれはほんの小さな小さなものなので、言及する価値はありません。

C/C++では、bool型をint、long、pointer、doubleなどと組み合わせて使用​​しています。 bool以外のものをboolに変換する必要があるのは非常に一般的です。これを行うには(bool)値を使用するのは安全ではないので、私は!!を使って行います。

例:この正確な場合

bool bValue = !!otherValue; 
+0

私はそれについて何の問題も聞いていません。 – chris

+6

"(ブール)値を使用するのは安全ではありません。なぜですか? –

+1

この問題は既にここで議論されています:http://stackoverflow.com/questions/248693/double-negation-in-c-code and http://stackoverflow.com/questions/8617090/double-negation-in-c- 0-1 – Juliano

答えて

9

ような、より明示的なものを好むだろう。

if (foo) 
    bar = 1; 
else 
    bar = 0; 

またはbar = foo ? 1 : 0;

!!ので、正確に一つのこと、私はそれが非常に明確な見つけるん。

+5

まあ、それは大丈夫だと私は同意しますが、 '!! foo'は' fooよりもあまり曖昧です*? 1:0'?私はそれに同意できません。 –

+0

@EdS。実際、私は主にあなたの投稿に対抗するために投稿しました - 私はあなたの視点には反対し、投票を決定させると考えました。これまでのところ、あなたは優位に立っています。 :) – sarnold

+0

投票のために+1 –

5

bool bValue = !!otherValue; 

あなたが!!を記述する必要はありません。彼らなしで正常に動作します:

bool bValue = otherValue; 

私はほとんどの場合暗黙的なキャストがいいと思います。

+0

になります。暗黙のキャスト(データの切り捨てを引き起こす可能性がある)によってコンパイラの警告が発生します。 – ildjarn

19

私は!!のような他のいくつかの選択肢と比較して非常に明確だと思うそれは、任意のC大丈夫ですかC++プログラマがそれを認識する必要がありますが、私は

(x != 0) 
+2

+1明確なコードはより良いコードです – Juliano

関連する問題