C++if ( c )
と同じですか?if ( c == 0 )
7 に答える
いいえ、if (c)
と同じif (c != 0)
です。そしてif (!c)
と同じif (c == 0)
です。
これで群れから離れます... " if (c)
" は " " に最も近いif (((bool)c) == true)
です。整数型の場合、これは " if (c != 0)
" を意味します。他の人が指摘したように、オーバーロードoperator !=
は奇妙さを引き起こす可能性がありますが、operator bool()
私が間違っていない限り " " をオーバーロードすることもできます。
cがポインタまたは数値の場合、
if( c )
と同等です
if( c != 0 )
cがブール値(bool型[C ++のみ])の場合、(編集:または演算子bool()のオーバーロードを伴うユーザー定義型)
if( c )
と同等です
if( c == true )
cがポインタでも数値でもブール値でもない場合、
if( c )
コンパイルされません。
それはもっと似ていますif ( c != 0 )
もちろん、!=
演算子はオーバーロードされる可能性があるため、それらが完全に等しいと言うのは完全に正確ではありません。
これは数値にのみ当てはまります。cがクラスの場合、次のように、変換ブール値を実行するオーバーロードされた演算子が存在する必要があります。
#include <stdio.h>
class c_type
{
public:
operator bool()
{
return true;
}
};
int main()
{
c_type c;
if (c) printf("true");
if (!c) printf ("false");
}
はい、に変更== 0
しても同じです!= 0
。
c
がポインタの場合、テスト
if ( c )
とはまったく同じではありません
if ( c != 0 )
後者は(null)ポインターc
に対する簡単なチェックです0
が、前者は実際にはがc
有効なオブジェクトを指しているかどうかをチェックするための命令です。ただし、通常、コンパイラは同じコードを生成します。