G M*_*ann 12 c++ pointers reference null-pointer undefined-behavior
int& fun()
{
int * temp = NULL;
return *temp;
}
Run Code Online (Sandbox Code Playgroud)
在上面的方法中,我试图取消引用NULL指针.当我调用此函数时,它不会给出异常.我发现当返回类型是引用时它不会给出异常,如果它是按值,那么它.即使将NULL指针的解引用引用为引用(如下面的行),它也不会给出.
int* temp = NULL:
int& temp1 = *temp;
Run Code Online (Sandbox Code Playgroud)
在这里我的问题是,在引用的情况下编译器是否进行解除引用?
Alo*_*ave 16
取消引用空指针是Undefined Behavior.
未定义的行为意味着任何事情都可能发生,因此无法为此定义行为.
不可否认,我将在第n次添加此C++标准报价,但似乎需要.
关于未定义的行为,
C++标准第1.3.24节规定:
允许的未定义行为包括完全忽略不可预测的结果,在翻译或程序执行期间以环境特征(有或没有发出诊断消息)的特定行为,终止翻译或执行(发布时)一条诊断信息).
注意:
另外,只是为了引起注意:
使用返回的引用或指向函数内局部变量的指针也是未定义的行为.你应该使用new在freestore(heap)上分配指针,然后返回一个引用/指针.
编辑:
正如@James McNellis,在评论中恰当地指出,
如果未使用返回的指针或引用,则行为已明确定义.