2017-03-03 35 views

回答

3

C++ 14 [expr.ref]/2:

表達E1->E2被轉換爲等效的形式(*(E1)).E2

C++ 14 [expr.unary.op]/1:

一元*操作者進行間接:至其所施加的表達應的指針的對象類型,或一個指向函數TY pe並且結果是左值,指的是對象或功能,表達式指向

該指針不指向某個對象,因此該報價沒有定義*p的行爲。標準中沒有其他地方定義它,所以它是未定義的行爲。

關於一個空指針是否可以說指向一個對象,N4618 [basic.compound]/3的指針值定義爲:

指針類型的每個值是下列值之一:

  • 的指針的對象或函數(指針被說成指向對象或功能),或
  • 指針過去的對象的端部,或
  • 空指針值用於該典型值e或
  • 無效的指針值。

它指示空指針值不指向對象。

+1

謝謝。雖然這是一個合理的假設,但是有沒有一種說空指針並不指向對象的語言?我也很驚訝這不是明確地稱爲未定義的,這在標準中是典型的。 – jacobsa

+1

@jacobsa文本「對象指針類型的有效值表示內存中的字節地址(1.7)或空指針(4.10)」。表明空指針值不是內存中字節的地址(因此它不能是一個對象的地址) –

+0

很好找;將添加到答案。 – jacobsa