关于V8的TYPE_CHECK宏中的C ++语法的问题

时间:2011-09-03 07:17:01

标签: c++ v8

在V8引擎代码中读取v8.h后,我可以找到以下宏。

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

我知道这是检查类型S是否与类型T兼容。在语句中,执行流如何进入while循环? while(false)表示条件始终为false。因此,while循环中的语句永远不会被执行。

因此,宏并不总是可用,是吗?

1 个答案:

答案 0 :(得分:7)

  

因此,宏并不总是可用,是吗?

宏始终可用。目的是产生编译时错误或警告(即一种类型与另一种类型不兼容)。

将它包装在while (false)中的目的是为了防止代码在运行时执行 - 而对于现代编译器,代码可能永远不会进入最终的二进制文件(优化出来)。

如果您想了解有关此技术的更多信息,请阅读static assertions