40

C++if ( c )と同じですか?if ( c == 0 )

4

7 に答える 7

74

いいえ、if (c)と同じif (c != 0)です。そしてif (!c)と同じif (c == 0)です。

于 2009-09-25T19:20:42.240 に答える
25

これで群れから離れます... " if (c)" は " " に最も近いif (((bool)c) == true)です。整数型の場合、これは " if (c != 0)" を意味します。他の人が指摘したように、オーバーロードoperator !=は奇妙さを引き起こす可能性がありますが、operator bool()私が間違っていない限り " " をオーバーロードすることもできます。

于 2009-09-25T19:38:45.850 に答える
7

cがポインタまたは数値の場合、

if( c )

と同等です

if( c != 0 )

cがブール値(bool型[C ++のみ])の場合、(編集:または演算子bool()のオーバーロードを伴うユーザー定義型)

if( c )

と同等です

if( c == true )

cがポインタでも数値でもブール値でもない場合、

if( c )

コンパイルされません。

于 2009-09-25T20:35:30.163 に答える
3

それはもっと似ていますif ( c != 0 )

もちろん、!=演算子はオーバーロードされる可能性があるため、それらが完全に等しいと言うのは完全に正確ではありません。

于 2009-09-25T19:20:31.947 に答える
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");
}
于 2009-09-25T19:47:31.627 に答える
0

はい、に変更== 0しても同じです!= 0

于 2009-09-25T19:20:42.570 に答える
-5

cがポインタの場合、テスト

if ( c )

とはまったく同じではありません

if ( c != 0 )

後者は(null)ポインターcに対する簡単なチェックです0が、前者は実際にはがc有効なオブジェクトを指しているかどうかをチェックするための命令です。ただし、通常、コンパイラは同じコードを生成します。

于 2009-09-25T20:37:11.417 に答える