Stack Overflow上有很多问题可以解释以下是C ++中未定义的行为:
MyType* p = nullptr;
p->DoSomething();
但我找不到一个引用C ++标准的人。 C ++ 11和/或C ++ 14标准的哪一部分说这是未定义的行为?
答案 0 :(得分:4)
C ++ 14 [expr.ref] / 2:
表达式
TypeError: not enough arguments for format string
将转换为等效形式E1->E2
C ++ 14 [expr.unary.op] / 1:
一元
(*(E1)).E2
运算符执行间接:应用它的表达式应该是指向对象类型的指针,或指向函数类型的指针,结果是引用对象的左值或函数,表达式指向。
指针不指向对象,因此该引用不定义*
的行为。标准中的任何其他地方都没有定义它,因此它是未定义的行为。
关于是否可以说空指针指向一个对象,N4618 [basic.compound] / 3将指针值定义为:
指针类型的每个值都是以下之一:
- 指向对象或函数的指针(指针指向对象或函数)或
- 指针超过对象的末尾,或
- 该类型的空指针值,或
- 指针值无效。
表示空指针值未指向对象。