引用(Reference)和指针到底有什么区别呢?先写几行C++代码,看看它们生成的汇编。
pointer.cc
void simpleFun(int* a_p)
{
*a_p = 7;
}
其生成的汇编:
_Z9simpleFunPi:
.LFB2:
pushl %ebp
.LCFI0:
movl %esp, %ebp
.LCFI1:
movl 8(%ebp), %eax
movl $7, (%eax)
popl %ebp
ret
reference.cc
void simpleFun(int & a_r)
{
a_r = 7;
}
其生成的汇编:
_Z9simpleFunRi:
.LFB2:
pushl %ebp
.LCFI0:
movl %esp, %ebp
.LCFI1:
movl 8(%ebp), %eax
movl $7, (%eax)
popl %ebp
ret
最后生成的汇编是一样。有人会说那引用和指针没有区别。
其实不能因为最后的汇编(机器)代码一样就说它们没有区别。
Reference有许多限制,比如说只能绑定一次,不能为NULL等等。这些限制编译的时候会检查。编译器的对这些限制的检查作用就大了,减少很多出错的机会,所以才会有人说能使用reference就使用reference。
- 千里