《C和C++代码精粹》——1.6 引用

简介:

本节书摘来自异步社区出版社《C和C++代码精粹》一书中的第1章,第1.6节,作者: 【美】Chuck Allison,更多章节内容可以访问云栖社区“异步社区”公众号查看。

1.6 引用

C和C++代码精粹
由于C函数的参数是按值传递的,若传递大型结构给函数,既费时又占用空间。大多数C程序员使用指针来代替按值传递,例如,如果struct Foo是一个大型记录结构,可以采用如下方法:

void f (struct Foo * fp)
{
/*通过fp来访问Foo结构*/
  fp->x=…
等等.
}```
当然,为了使用这个函数,必须传递Foo结构的地址:

struct Foo a;

f (&a);`
C++的引用机制是符号上的便捷,这样做可以减少采用指针变量的显式间接访问的烦恼。在C++上面的代码可以被描述为:

void f(Foo &fr)
{
/*直接访问Foo的成员*/
fr.x=…
等等.
}```
现在可以像这样调用f不使用地址操作符:

Foo a;
...
f(a);`
f原型里的&符号指导编译器通过引用来传递参数,这实际上为你处理了所有的间接访问。(对于Pascal程序员而言,引用参数等价于Var参数。)

引用调用意味着对函数参数所做的任何修改也会影响到主调程序中的原始参数。这就是说你可以编写一个实际运行的交换函数(而不是一个宏)(参见程序清单1.4)。如果不打算修改一个引用参数,就可以像我在程序清单1.1中所做的那样将它声明为常引用。常引用参数具有安全性、按值调用的符号方便性以及引用调用的有效性。

如程序清单1.5所示,也可以通过引用从函数中返回一个对象,在赋值语句的左边是一个函数调用,这看起来有些奇怪,但是这在运算符重载时是方便的(尤其是=和[ ])。

本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。

相关文章
|
30天前
|
自然语言处理 算法 前端开发
C++与Doxygen:精通代码文档化之道
C++与Doxygen:精通代码文档化之道
49 0
|
1月前
|
Linux 编译器 程序员
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
【Linux 调试秘籍】深入探索 C++:运行时获取堆栈信息和源代码行数的终极指南
68 0
|
1月前
|
存储 JSON 安全
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
66 0
|
1月前
|
设计模式 算法 数据安全/隐私保护
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(二)
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用
25 0
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(二)
|
1月前
|
存储 算法 编译器
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用(一)
【C++ 引用 】C++深度解析:引用成员变量的初始化及其在模板编程中的应用
41 0
|
1天前
|
设计模式 编译器 数据安全/隐私保护
C++ 多级继承与多重继承:代码组织与灵活性的平衡
C++的多级和多重继承允许类从多个基类继承,促进代码重用和组织。优点包括代码效率和灵活性,但复杂性、菱形继承问题(导致命名冲突和歧义)以及对基类修改的脆弱性是潜在缺点。建议使用接口继承或组合来避免菱形继承。访问控制规则遵循公有、私有和受保护继承的原则。在使用这些继承形式时,需谨慎权衡优缺点。
12 1
|
2天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
|
3天前
|
C++
【C++】在使用代码组装URL时,一定要注意的坑......
【C++】在使用代码组装URL时,一定要注意的坑......
9 0
|
24天前
|
C语言 C++ 容器
C调用C++代码
C调用C++代码
12 1
|
30天前
|
算法 程序员 C语言
C++设计哲学:构建高效和灵活代码的艺术
C++设计哲学:构建高效和灵活代码的艺术
60 1