我正在阅读编译时断言,在网上搜索后我得到了一些我不明白的代码。
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)
但我没有得到这个想法。有人可以帮助我理解上面的代码。第二对这段代码感到困惑
typedef CompileAssert<(bool(expr))> msg[bool(expr) ? 1 : -1]
#define 将用上面的表达式替换 COMPILE_ASSERT(expr, msg)。但是msg[bool(expr) 怎么样?1 : -1] CompileAssert<(bool(expr))>的另一种类型。
请有人详细和简单地解释一下。我有很多很多很多问题。
就像为什么 message(PassRefPtr_should_never_be_assigned_to) 在不使用 "" 的情况下工作 char *