有了指针,C++为什么还要引入引用? #
前言 #
C++已经从C语言处继承了指针,既然有了指针,那C++为什么还要引入引用呢?减少拷贝动作?指针也可以。
本文不介绍什么是指针,什么是引用,也不介绍指针和引用的区别,这些你可以去我之前的文章查看。本文只介绍C++引入引用的原因。
直接原因 #
为了支持运算符重载。直接看示例代码:
void f1(const complex* x, const complex* y) { // 没有引用
complex z = *x + *y; // 很丑
// ...
}
void f2(const complex& x, const complex& y) { // 有引用
complex z = x + y; // 更好
// ...
}
从这两段代码就可以看出来,如果使用指针,两个对象做运算需要先解指针,很丑,而且如果为了健壮性,还需要判断是否空指针。而有了引用,代码更好看简洁,还更安全。
建议 #
应该使用引用还是指针?因为引用更安全方便,建议尽可能使用引用,必要时使用指针。当你不需要"重新赋值"时,通常更倾向于使用引用(指针才可以重新赋值,引用不可以)。
思考题 #
参数传值应该引用传递还是指针传递?或者值传递?