当前位置: 首页 > news >正文

【和春笋一起学C++】(十七)C++函数新特性——内联函数和引用变量

C++提供了新的函数特性,使之有别于C语言。主要包括:

  1. 内联函数;
  2. 按引用传递变量;
  3. 默认参数值;
  4. 函数重载(多态);
  5. 模版函数;

因篇幅限制,本文首先介绍内联函数和引用变量的定义。

目录

1. 内联函数

2. 引用变量

2.1 创建引用变量

2.2 引用和指针的区别

2.3 引用用作函数参数


1. 内联函数

内联函数是C++为提高程序运行速度所做的一项改进。常规函数和内联函数之间的主要区别在于C++编译器如何将它们组合到程序中。

编译的最终产品是可执行程序,可执行程序由一组机器语言指令组成。程序运行时,操作系统将这些指令载入到计算机的内存中,因此,每条指令都有特定的内存地址,计算机将逐步执行这些指令。

内联函数的运行速度比常规函数稍快,但代价是需要占用更多的内存。

那什么函数适合设置为内联函数?

一般来说,经常被调用且函数运行时间很短的函数适合设置为内联函数。

那怎么设置内联函数呢?首先在函数声明前加上关键字inline,然后在函数定义前也加上关键字inline,但通常的做法是省略函数原型,直接将整个定义放在本应提供原型的地方。

一个关于内联函数的简单实例:

#include <iostream>using namespace std;
inline double square(double x) { return x * x; }
int main()
{double a = 5.0;double b = square(a);double c = square(a + 1);cout << "b= " << b << endl;cout << "c= " << c << endl;return 0;
}

输出值b=25,c=36,表明内联函数和常规函数一样,当参数为表达式,则函数将传递表达式的值,这使得内联函数的功能远远超过了C语言的宏定义。因此,在C++程序中如果使用了C语言的宏执行了类似函数的功能,应考虑将它们转换为C++内联函数(实际上,C语言使用预处理器语句#define来提供宏,是内联代码的原始实现)。


                                                原文为CSDN作者:三月微暖寻春笋 


2. 引用变量

引用变量是C++新增的复合类型,引用是已定义变量的别名。引用变量的主要用途是用作函数参数,通过将引用变量用作函数参数,函数将使用原始数据,而不是其拷贝。除指针外,引用也为函数处理大型结构提供了一种非常方便的用途。

2.1 创建引用变量

C和C++使用&符合来指示变量的地址。C++给&符合赋予了另一个含义,将其用来声明引用,有如下两条语句:

double a = 5.0;
double & b = a;

其中,&不是地址操作符,而是类型标识符的一部分,就像声明指针变量一样,char*指的是指向char的指针,int &指的是指向int的引用。将b声明为a的引用,代表a和b是一样的,在后面的代码中,a和b可以完全互换,a和b的值以及它们指向的内存地址都相同。为了验证这一点,请看下面的小程序:

#include <iostream>using namespace std;
int main()
{double a = 5.0;double & b = a;cout << "a = " << a << ",  b = " << b << endl;cout << "&a = " << &a << ",  &b = " << &b << endl;a++;cout << "a = " << a << ",  b = " << b << endl;cout << "&a = " << &a << ",  &b = " << &b << endl;b++;cout << "a = " << a << ",  b = " << b << endl;cout << "&a = " << &a << ",  &b = " << &b << endl;return 0;
}

程序输出如下:

 程序说明:

上述程序表明,a和b是完全一样的,将a加1意味着将b也加1,将b加1意味着将a也加1,不仅它们的值相同,而且它们的内存地址也相同。

程序中需要注意的是&操作符,如果&操作符的前面有内置类型、结构或对象,则&代表将变量声明为引用,否则&操作符是一个取地址操作符。

对于指针来说,如果*操作符的前面有内置类型,结构或对象,则*代表将变量声明为指针变量,否则*操作符是一个解除引用操作符。

2.2 引用和指针的区别

有以下3条语句:

int a = 2;
int &b = a;
int *c = &a;

上述三条语句表示,b和*c都可以同a互换,&b和c又都可以同&a互换。

引用和指针的区别之一是,引用变量必须在声明时同时进行初始化,而指针可以先声明,再赋值。

引用更接近const指针,必须在创建时进行初始化,一旦与某个变量关联起来,就必须一直效忠于它。

int a = 2;
int &b = a;
int * const c = &a;

引用b所扮演的角色与*c相同。 

2.3 引用用作函数参数

将引用用作函数参数主要是指将结构的引用或对象的引用用作函数参数。

引用被用作函数参数,使函数中的变量名成为调用程序中的变量的别名,这种传递参数的方法称为按引用传递。按引用传递允许被调用的函数能够访问调用函数中的变量。C++新增的这项特性是对C语言的超越。


因篇幅限制,将引用用作函数参数的详细内容放在下篇博客中介绍。

相关文章:

  • 在java 项目 springboot3.3 中 调用第三方接口(乙方),如何做到幂等操作(调用方为甲方,被调用方为乙方)? 以及啥是幂等操作?
  • 本地日记本,用于记录日常。
  • ④Pybullet之Informed RRT*算法介绍及示例
  • 四元数:从理论基础到实际应用的深度探索
  • .net jwt实现
  • 在Mathematica中实现Newton-Raphson迭代的收敛时间算法
  • 区块链架构深度解析:从 Genesis Block 到 Layer 2
  • Elasticsearch中的地理空间(Geo)数据类型介绍
  • 使用Virtual Serial Port Driver+com2tcp(tcp2com)进行两台电脑的串口通讯
  • 【运维实战】Rsync将一台主Web服务器上的文件和目录同步到另一台备份服务器!
  • ES海量数据更新及导入导出备份
  • 你工作中涉及的安全方面的测试有哪些怎么回答
  • 第6篇:中间件 SQL 重写与语义分析引擎实现原理
  • 瀚文(HelloWord)智能键盘项目深度剖析:从0到1的全流程解读
  • Ubuntu24.04 交叉编译 aarch64 ffmpeg
  • 旅游微信小程序制作指南
  • 高并发区块链系统实战:从架构设计到性能优化
  • 华为VanillaNet遇上BiFPN:YOLOv8的性能突破之旅
  • `<CLS>` 向量是 `logits` 计算的“原材料”,`logits` 是基于 `<CLS>` 向量的下游预测结果
  • Python爬虫:trafilatura 的详细使用(高效的网页正文提取工具)
  • 建设部工程业绩网站/2021搜索引擎排名
  • 企业手机网站建设价位/百度关键词优化大师
  • 阿里云做企业网站/职业培训机构有哪些
  • wordpress users/深圳外包seo
  • 微信赌博链接网站建设/免费代理浏览网页
  • 个人网站建设的要点/怎样在平台上发布信息推广