首页 > 解决方案 > 对取消引用的 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++ 中合法吗?访问objifprt == NULL是未定义的行为,但是仅定义 NULL 取消引用的引用也会导致 UB 吗?

是的,唯一的一点是舒适和风格的主题,但理论主题也是物质。也许还有其他优雅和UB-。异常和无升压的解决方案?

标签: c++referencenullundefined-behavior

解决方案


这段代码在 C++ 中合法吗?

不,这是不合法的。

只是定义 NULL 取消引用的引用也会导致 UB?

是的。

也许还有其他优雅和UB-。异常和无升压的解决方案?

一个优雅的解决方案:在检查空值后绑定引用:

if (auto *ptr = get_obj_ptr())
{
    auto& obj = *ptr; 
    // access obj here

推荐阅读