if ( c )
はC++のif ( c == 0 )
と同じですか?
いいえ、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++のみ])の場合(edit:または演算子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");
}