一张图观察 引用,指针,形参调用
图片来源:中国大学MOOC——C++程序设计(面向对象进阶)崔毅东 、杨谈
第3单元——第1节
总结:写法上的区别
在指针传递时,调用函数时,要写&,表明传址
在函数声明,用"星号"表示来的是指针
在函数体内部要修改时,也全程用*
在引用时,仅在函数声明,用“&”表明是个别名
引用的优点
相比于指针
避免在函数内部 频繁用*来表明何时需要修改
和在函数调用时,需要取地址&
引用的弊端
bool do_something(int a, double b, char& c);
int a = 1;
double b = 2.34;
char c;
bool ok = do_something(a, b, c);
不知道你是否发现一个问题?
传进去3个参数,而第三个参数c,我们用了引用,表明是需要修改的;而对于一个“初学者“or”大程序“上百行时,我们如何才能分辨传进去的哪些变量是要修改的呢?
光写”do_something(a, b, c)“产生了语法上的歧义
影响了代码的可读性
建议的书写风格
以上转述自知乎——Graphene
接下来引述该大佬的一段话
”很多大厂的 C++ 生产规范(例如隔壁老 G 家的)也明令禁止左值引用类型参数。有学过 Java 等自带 GC 语言的同学可能会认为“多余的应该是指针,而不是引用”,但有很多事情是 C++ 引用做不到而需要依赖于指针的,例如存储空值、重新赋值和做哈希比较。“
推荐用引用的顺序
普通变量<自定义数据结构<算法库等库函数,STL容器等,类~作为函数返回值
引用作为函数返回值优点
返回的变量本身,而不是额外创建的内存,有助于提高程序效率
示例1:返回值进行引用
bool &do_something(int a){
return a;
}
bool flag=do_something(1);
承接示例1:在定义变量时进行引用
bool &flag=do_something(1);