Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 静态_cast<;T*挥发性*>;-这个代码是什么意思?_C++ - Fatal编程技术网

C++ 静态_cast<;T*挥发性*>;-这个代码是什么意思?

C++ 静态_cast<;T*挥发性*>;-这个代码是什么意思?,c++,C++,在Google V8 Javascript引擎的V8.h中,有一段代码在编译阶段检查两种类型是否匹配。我能理解其中的大部分内容,但不能理解static\u cast的语法,添加不寻常的volatile*意味着什么,为什么需要它 #define TYPE_CHECK(T, S) \ while (false) { \ *(

在Google V8 Javascript引擎的V8.h中,有一段代码在编译阶段检查两种类型是否匹配。我能理解其中的大部分内容,但不能理解
static\u cast
的语法,添加不寻常的volatile*意味着什么,为什么需要它

#define TYPE_CHECK(T, S)                                       \
  while (false) {                                              \
    *(static_cast<T* volatile*>(0)) = static_cast<S*>(0);      \
  }
#定义类型检查(T,S)\
while(false){\
*(静态_cast(0))=静态_cast(0)\
}
我注意到在下面的主题中也讨论了相同的代码,但没有详细讨论我要问的问题。
T*volatile*
表示“指向
volatile
指向
T
的指针”。因此,它与
T**
相同,不同之处在于当取消引用时,得到的左值是
volatile

至于此处需要
volatile
的原因,请参见提交说明,您可以在此处查看:

v8.h中的类型_CHECK应分配给volatile限定的空指针

除非指针是volatile限定的,否则Clang将警告LLVM 在优化过程中删除分配。这并不是一个问题 该代码不应执行,但警告将被视为错误 当构建Chromium时,会停止构建


T*volatile*
表示“指向
volatile
指向
T
的指针”。因此,它与
T**
相同,不同之处在于当取消引用时,得到的左值是
volatile

至于此处需要
volatile
的原因,请参见提交说明,您可以在此处查看:

v8.h中的类型_CHECK应分配给volatile限定的空指针

除非指针是volatile限定的,否则Clang将警告LLVM 在优化过程中删除分配。这并不是一个问题 该代码不应执行,但警告将被视为错误 当构建Chromium时,会停止构建


volatile*
表示指向-
volatile
的指针。你在问什么是
volatile
意思吗?@zenith问题是为什么
volatile
会出现在这段代码中(也就是说,如果代码被删除,为什么代码会中断或执行不同)
volatile*
意味着指向-
volatile
的指针。你在问什么是
volatile
意思吗?@zenith问题是为什么
volatile
会出现在这段代码中(也就是说,如果代码被删除了,为什么代码会中断或执行得不一样)@M.M,因为这样每一个好的答案都会执行代码。再问一个问题*(static_cast(0))=static_cast(0)和(static_cast(0))=static_cast(0)之间有什么不同@RicoWang请添加一个单独的问题。@M.M,因为这样,每一个好的答案都会执行代码。再问一个问题*(static_cast(0))=static_cast(0)和(static_cast(0))=static_cast(0)之间有什么不同@李科旺,请补充一个单独的问题。