如何解决在null指针上使用static_cast时,这里的惯用法是什么?
静态分析将该代码标记为nullPointerarithmetic:
static_cast<BYTE*>(NULL) + p_row_fields->offsets.back(),// field offset
其中NULL定义为#define NULL 0
并通过typedef将偏移量解析为std::vector<int>
我的问题是-这个成语的目的是什么?
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,但从技术上讲,仍然没有标准的保证来保证结果的地址是预期的。
显示的内容与折衷程度较低的直接演员表之间是否有任何区别:
static_cast<BYTE*>(p_row_fields->offsets.back())
是的,有区别。在整数表达式中,只有值为0的编译时常数prvalue才能转换为指针类型。不能将0以外的值和p_row_fields->offsets.back()
之类的左值静态转换为指针。
因此,引用的演员表格式错误。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。