当前位置: 首页 > 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语言的超越。


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

http://www.lqws.cn/news/129241.html

相关文章:

  • 边缘计算网关赋能沸石转轮运行故障智能诊断的配置实例
  • Webpack常见的插件和模式
  • Rocket客户端消息确认机制
  • 电路图识图基础知识-降压启动(十五)
  • 2. 库的操作
  • RabbitMQ 的异步化、解耦和流量削峰三大核心机制
  • hadoop集群单词统计(ssh与web)
  • GPUCUDA 发展编年史:从 3D 渲染到 AI 大模型时代(上)
  • 涂胶协作机器人解决方案 | Kinova Link 6 Cobot在涂胶工业的方案应用与价值
  • 线性模型选择中容易被忽视的关键洞察
  • 树莓派系列教程第九弹:Cpolar内网穿透搭建NAS
  • Linux 下支持 **截图 + 录屏** 的高级工具对比
  • c#开发AI模型对话
  • 相机--相机标定实操
  • JavaScript性能优化实战技术
  • webPack基本使用步骤
  • 时序数据库IoTDB与EdgeX Foundry集成适配服务介绍
  • 使用PyQt5的图形用户界面(GUI)开发教程
  • 功能测试、性能测试、安全测试详解
  • linux如何配置wifi连接
  • 机器学习算法分类
  • Neo4j 认证与授权:原理、技术与最佳实践深度解析
  • (每日一道算法题)求根节点到叶节点数字之和
  • 【高校论文】DFORMER重新思考用于语义分割的RGBD表示学习[南开国防科大]
  • C++多态与继承实战解析
  • Python-面向对象
  • RabbitMQ 在解决数据库高并发问题中的定位和核心机制
  • 数据结构与算法学习笔记(Acwing 提高课)----动态规划·树形DP
  • 《小明的一站式套餐服务平台:抽象工厂模式》
  • StarRocks与Apache Iceberg:构建高效湖仓一体的实时分析平台