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)
在这里我的问题是,在引用的情况下编译器是否进行解除引用?
在C++中,有些东西出现在明确定义和未定义之间.具体而言,这些被称为实现定义和未指定.现在,我对未指明的东西很感兴趣.
什么时候可以使用这些功能,什么时候应该避免?是否有正确代码的未指定行为的良好示例?在编写软件时,它是否是最佳选择?
Matt McNabb提供的定义:
未定义 - 任何事情都可能发生
实现定义 - 有限数量的结果是可能的,编译器的文档必须说明会发生什么
未指定 - 可能有限数量的结果 - 通常标准描述了可能结果的集合
定义明确 - 以上都不是
格式良好的程序 - 无错误编译的程序(可能表现出未定义的行为)
后续问题:
放松的原子是否被指定为未指定或明确定义?