9

<windows.h>ヘッダーには独自のタイプが付属していますBOOL。実装をのぞいてみると、FALSEのマクロ、 のマクロの0ようTRUEです1が、これが指定されているかどうかはわかりません。

BOOLaを aに変換する慣用的な方法は何boolですか? 考えられる方法はたくさん想像できます:

bool a = static_cast<bool>(x);

bool b = x ? true : false;

bool c = (x == TRUE);

bool d = (x != FALSE);

bool e = !!x;

// ...
4

5 に答える 5

0

私はマクロを使用します:

#define _bool(b) (!!(b)) 

IMO、私のコードをより読みやすくします。

編集済み: コメント投稿者が、マクロ名でのアンダースコアの使用に異議を唱えました。これに対処するために、これは新しいバージョンであり、これはまだ一般的であり、同じ名前を使用してい_boolますが、これによると、準拠しています

namespace MyBool 
{
    template<typename T> inline bool _bool(const T b) 
    {
        return !!b;
    }
}

using namespace MyBool;
于 2013-08-30T05:35:32.450 に答える
0

win32 プログラマーがどのようにそれを行うかを言うのは難しいですが、私見では次の方法で行う必要があります。

bool c = (X == TRUE);

また

bool d = (x != FALSE);


マクロ (またはその他の定義済みのもの) の不変性を中継するのは悪い習慣だと思います。

ある日、TRUE が 0 になり、FALSE が 1 になるかもしれません ;)

于 2013-08-29T20:08:44.383 に答える
0

BOOLWin32には2 つ以上の値があるため、安全な方法はありません。

于 2013-08-29T20:16:31.053 に答える