1

コンパイル時のアサートを読んでいます。オンラインで検索した後、理解できないコードがいくつかありました。

template <bool> struct CompileAssert {};
#define COMPILE_ASSERT(expr, msg) \
    typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]

この COMPILE_ASSERT を以下のように使用しました。

COMPILE_ASSERT(!sizeof(T*), PassRefPtr_should_never_be_assigned_to)

しかし、私はアイデアを思いつきませんでした.誰かが上記のコードを理解するのを手伝ってくれますか. 2番目はこのコードで混乱しました

typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]

#define は COMPILE_ASSERT (expr, msg)を上記の expession に置き換えますが、どのようにmsg[bool(expr) ? 1 : -1] CompileAssert<(bool(expr))>の代替型。

誰か詳しくわかりやすく説明してください。たくさんの質問があります。

char * に "" を使用せずに message(PassRefPtr_should_never_be_assigned_to) が機能する理由のように

4

2 に答える 2