gpt4 book ai didi

c++ - static_cast - 这段代码是什么意思?

转载 作者:行者123 更新时间:2023-11-30 00:47:15 25 4
gpt4 key购买 nike

在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?

最佳答案

T* volatile* 表示“指向volatile 的指针指向T”。所以它与 T** 相同,只是在取消引用时,生成的左值是 volatile

至于为什么这里需要volatile,在commit description中有解释,你可以在这里查看:https://github.com/v8/v8/commit/35a80e16241308b4f476875d0f96282cf697a029

TYPE_CHECK in v8.h should assign to volatile qualified null-pointer.

Unless the pointer is volatile qualified, Clang will warn that LLVMremoves the assignment during optimization. This is not a problem asthat code should never execute, but the warning is treated as an errorwhen building Chromium, and thus stops the build.

关于c++ - static_cast<T* volatile*> - 这段代码是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35445625/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com