C 标准的哪一部分涵盖通过空指针调用方法
Which part of the C++ standard covers calling a method via a null pointer?
堆栈上有许多问题,解释了以下是C 中的未定义行为:
MyType* p = nullptr;
p->DoSomething();
,但我找不到引用C 标准的一个。C 11和/或C 14标准的哪一部分表示这是不确定的行为?
c 14 [expr.ref]/2:
表达式
E1->E2
转换为等效形式(*(E1)).E2
c 14 [expr.unary.op]/1:
单元
*
操作员执行间接:应用其应用的表达式应为对象类型的指针,或指向函数类型的指针,结果是指对象的lvalue或函数表达式点。
指针没有指向对象,因此该报价不能定义*p
的行为。标准中的其他地方都没有定义它,因此它是未定义的行为。
关于是否可以说零指针指向对象,n4618 [basic.compound]/3将指针值定义为:
指针类型的每个值是以下之一:
- 指向对象或函数的指针(说指向对象或函数指向),或
- 一个指针越过对象的末端或
- 该类型的零指针值或
- 无效的指针值。
表明空指针值不指向对象。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 当使用通配符和null指针调用函数时,对输出的说明
- Visual c ++,使用字符串引用/指针调用 dll 函数
- 为什么会出现 gettnig 运行时错误:加载类型为"_Bit_type"(stl_bvector.h) 的空指针?
- 使用基类指针调用基类的值构造函数的语法是什么?
- 运行时错误:引用绑定到类型为"int"的空指针
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?
- 为什么我在空指针错误(链表)中获取成员访问权限
- 空指针(为缺少的输出数组调用的 create() 在 create,文件 /home/m/OpenCV/modules/
- std::shared_ptr 在空指针上调用非默认删除程序
- 在空指针上调用Allocator_traits :: Deallocation
- C 标准的哪一部分涵盖通过空指针调用方法
- 对不完整类型的空指针调用delete合法吗
- 为什么通过空指针调用方法在C++中"有效"?
- 空指针调用立即失败
- 传递给函数调用后的空指针sqlite3句柄
- 为什么Boost.Cconcept通过空指针调用析构函数
- 为什么在空指针上调用解构函数?
- 什么更快:检查空指针或调用空函数
- 在JNI对话框生成器调用中出现空指针异常