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

如何解决在null指针上使用static_cast时,这里的惯用法是什么?

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

static_cast<BYTE*>(NULL) + p_row_fields->offsets.back(),// field offset

其中NULL定义为#define NULL 0 并通过typedef将偏移量解析为std::vector<int>

有问题的行作为BYTE *参数传递给方法调用

我的问题是-这个成语的目的是什么?

显示内容与折衷程度较低的直接演员表之间是否有任何区别:

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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?