static_cast <t * volatile * =“”> - 这段代码是什么意思?

时间:2016-02-17 00:22:16

标签: c++

在Google V8 Javascript引擎的V8.h中,有一段代码可以检查两个类型在编译阶段是否匹配。我可以理解其中很大一部分,但无法理解static_cast<T* volatile*>的语法,添加不寻常的 volatile * 是什么意思,为什么需要呢?

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

我注意到下面这个主题已经讨论过相同的代码,但是我没有详细讨论过这个问题。 How does the following code work?

1 个答案:

答案 0 :(得分:6)

T* volatile*表示&#34;指向volatile指向T&#34;的指针。因此它与T**相同,只是在取消引用时,生成的左值为volatile

至于为何需要volatile,请在提交说明中说明,您可以在此处查看:https://github.com/v8/v8/commit/35a80e16241308b4f476875d0f96282cf697a029

  

v8.h中的TYPE_CHECK应该分配给volatile限定的空指针。

     

除非指针是volatile限定的,否则Clang会警告LLVM   在优化期间删除分配。这不是问题所在   该代码永远不应该执行,但警告被视为错误   在构建Chromium时,从而停止构建。