gpt4 book ai didi

c++ - 在null指针上使用static_cast时,这里的惯用法是什么?

转载 作者:行者123 更新时间:2023-12-02 09:51:21 25 4
gpt4 key购买 nike

静态分析将该代码标记为nullPointerArithmetic:

static_cast<BYTE*>(NULL) + p_row_fields->offsets.back(), // field offset
其中NULL定义为 #define NULL 0和偏移量通过typedef解析为 std::vector<int>有问题的行作为BYTE *参数传递给方法调用。
我的问题是-这个成语的目的是什么?
显示的内容和折衷程度较低的直接 Actor 之间有什么区别:
static_cast<BYTE*>(p_row_fields->offsets.back())

最佳答案

空指针常量将转换为任何指针类型,从而导致该指针类型的空指针值。因此,static_cast<BYTE*>(NULL)产生类型为BYTE*的空指针。此转换也隐式起作用。
严格来说,标准没有定义指针运算在null上的行为,因为(或假设)在null地址上没有数组。
就假设编译器允许的实际行为而言,人们可能希望它的行为与以下行为相同:

reinterpret_cast<Byte*>(
static_cast<std::intptr_t>(
p_row_fields->offsets.back()
)
)
虽然这不是UB,但从技术上讲,仍然没有标准的保证来保证最终地址是预期的。

Is there any difference between what's shown and the less eclectic direct cast:

static_cast<BYTE*>(p_row_fields->offsets.back())

是,有一点不同。在整数表达式中,只有值为0的编译时常数prvalue才能转换为指针类型。不能将非0的值和诸如 p_row_fields->offsets.back()的左值静态转换为指针。
因此,引用的 Actor 表格式错误。

关于c++ - 在null指针上使用static_cast时,这里的惯用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64393854/

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