如何理解这段用于类型检查的C ++代码?

时间:2011-08-08 09:28:46

标签: c++

  

可能重复:
  How does the following code work?

#define TYPE_CHECK(T, S)                                       \
  while (false) {                                              \
    *(static_cast<T* volatile*>(0)) = static_cast<S*>(0);      \
  }

我发现它很棘手,它是如何工作的?为什么要挥发?

4 个答案:

答案 0 :(得分:4)

由于它是一个静态强制转换,它让编译器确保指向这两种类型的指针是等效的。 while(false)确保它永远不会运行,并且它只是一个编译时间。

答案 1 :(得分:1)

它会静态检查S*是否可以投放到T*。没有代码在运行时执行。我认为volatile会阻止优化,这只会让编译器忽略代码。

答案 2 :(得分:0)

代码正在检查是否可以将S *分配给T *,如果不能,则强制编译错误。至于挥发性,我不确定。

答案 3 :(得分:-1)

如果类型无法转换,则无法编译。但它永远不会被执行。