c++ - 对取消引用的 NULL 指针的引用是否会在 C++ 中创建或访问时产生 UB
问题描述
我正在尝试实现这样的代码
if (auto *ptr = get_obj_ptr(), &obj = *ptr; ptr)
{
// access obj here
}
else
// handle error without accessing ptr and obj
假设get_obj_ptr()
可以返回指向有效对象的有效指针或NULL
. 这段代码在 C++ 中合法吗?访问obj
ifprt == NULL
是未定义的行为,但是仅定义 NULL 取消引用的引用也会导致 UB 吗?
是的,唯一的一点是舒适和风格的主题,但理论主题也是物质。也许还有其他优雅和UB-。异常和无升压的解决方案?
解决方案
这段代码在 C++ 中合法吗?
不,这是不合法的。
只是定义 NULL 取消引用的引用也会导致 UB?
是的。
也许还有其他优雅和UB-。异常和无升压的解决方案?
一个优雅的解决方案:在检查空值后绑定引用:
if (auto *ptr = get_obj_ptr())
{
auto& obj = *ptr;
// access obj here
推荐阅读
- javascript - VueJS 组件数据未更新
- amazon-web-services - 如何从 Glacier 存储类过渡到 Deep Archive 存储类?
- reactjs - 当 CSS 模块不在同一个 CSS 文件中时,如何通过 CSS 模块识别相同的类名
- c# - 在 xml 文件中嵌入 .jsp 链接
- windows - 使用bat文件获取和删除redis数据
- c# - finally 块的隐藏功能?
- c++ - CUDA返回值错误35是什么意思?
- javascript - 总是无法在“节点”上执行“删除孩子”:参数 1 不是“节点”类型
- c++ - 从 node.js 本机插件工作池线程创建 napi_value
- angular - TypeError:对象不支持角度 6.1 上的属性或方法“registerOnChange”