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