#define TYPE_CHECK(T, S) \
while (false) { \
*(static_cast<T* volatile*>(0)) = static_cast<S*>(0); \
}
我发现它很棘手,它是如何工作的?为什么要挥发?
答案 0 :(得分:4)
由于它是一个静态强制转换,它让编译器确保指向这两种类型的指针是等效的。 while(false)
确保它永远不会运行,并且它只是一个编译时间。
答案 1 :(得分:1)
它会静态检查S*
是否可以投放到T*
。没有代码在运行时执行。我认为volatile
会阻止优化,这只会让编译器忽略代码。
答案 2 :(得分:0)
代码正在检查是否可以将S *分配给T *,如果不能,则强制编译错误。至于挥发性,我不确定。
答案 3 :(得分:-1)
如果类型无法转换,则无法编译。但它永远不会被执行。