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

How to understand this piece of C++ code, which is for type checking?

本文关键字:检查 类型 C++ 代码 用于 何理解 段用于      更新时间:2023-10-16

可能重复:
以下代码是如何工作的?

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

我觉得这很棘手,它是如何工作的?为什么不稳定?

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

它静态地检查S*是否可以转换为T*。运行时不执行任何代码。我认为volatile阻止了优化,这只会使编译器忽略代码。

代码检查S*是否可以分配给T*,如果不能,则强制执行编译错误。至于易失性,我不确定。

如果类型不能强制转换,它就不会编译。但它从未被执行过。