猿问

C ++标准:取消引用NULL指针以获得引用?

C ++标准:取消引用NULL指针以获得引用?

我想知道C ++标准对这样的代码怎么说:

int* ptr = NULL;int& ref = *ptr;int* ptr2 = &ref;

实际上,结果是ptr2NULL,但我想知道,这只是实现细节还是在标准中定义得很好?
在不同的情况下,对NULL指针的取消引用将导致崩溃,但是在这里,我对其进行引用以获取由编译器作为指针实现的引用,因此实际上并没有实际的NULL取消引用。


慕的地8271018
浏览 2022回答 3
3回答

杨__羊羊

取消引用NULL指针是未定义的行为。实际上,该标准在注释(8.3.2 / 4“参考”)中指出了这种确切情况:注意:特别是,空引用不能存在于定义良好的程序中,因为创建此类引用的唯一方法是将其绑定到通过取消引用空指针而获得的“对象”,这会导致未定义的行为。顺便说一句:一次我知道可以以定义良好的方式“取消引用” NULL指针的方式是作为运算sizeof符的操作数,因为操作数to sizeof并未被实际求值(因此,取消引用从未实际执行过)发生)。

慕田峪4524236

取消引用NULL指针是C ++标准中明确未定义的行为,因此您看到的是特定于实现的。从C ++ 0x标准草案中的1.9.4复制(在这方面类似于以前的标准):在本国际标准中,某些其他操作被描述为未定义(例如,取消引用空指针的效果)。[ 注意:本国际标准对包含未定义行为的程序的行为没有任何要求。- 尾注 ]
随时随地看视频慕课网APP
我要回答