web-dev-qa-db-ja.com

ifステートメントはc ++でどのように評価されますか?

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

36
derrdji

いいえ、if (c)if (c != 0)と同じです。また、if (!c)if (c == 0)と同じです。

59
Jesper

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

23
D.Shawley

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

if( c )

に相当

if( c != 0 )

Cがブール値(タイプbool [C++のみ])の場合(edit:または演算子bool()のオーバーロードを持つユーザー定義タイプ)

if( c )

に相当

if( c == true )

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

if( c )

コンパイルされません。

6

if ( c != 0 )に似ています

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

3
Mehrdad Afshari

これは数値にのみ当てはまります。 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
galets