众所周知,没有空引用。
所以我尝试编译这行代码可以吗?
int main{
int &surprise_reference=*(int*)0;
return 0;}
令我吃惊的此代码的工作没有一个单一的警告。
然后我我的代码更改为
int main() {
int&suprise_reference=*(int*)0;
if(&suprise_reference==0)
std::cout<<"you don't know references";
return 0;
}
输出程序的是你不知道引用。
这是否意味着解引用空指针也会导致空引用?
请帮忙..
澄清:在“知道这是非法的”,在“本”指的是创建'NULL'引用的一般行为,而不是这段特定的代码。大多数现代编译器不检查是否将常量零转换为指针类型,并在发生这种情况时将创建的指针标记为“NULL”。因此,'(int *)0'创建一个通用的'int *',它被视为与其他任何'int'指针一样。 – Borealid 2012-02-04 06:18:31
@Borealid:谢谢你的澄清!我在答案中做了相关的编辑。 – 2012-02-04 19:11:49