IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C++ 函数深入(内联函数,引用变量) -> 正文阅读

[C++知识库]C++ 函数深入(内联函数,引用变量)

内联函数
除去函数调用,C++内联函数提供了另一种选择,内联函数的编译代码和其他的程序代码“内联”起来。x编译器将使用相应的函数代码替换函数调用。

如何使用内联函数
必须在函数声明前或函数定义前加上关键字inline.

如下面的代码:

#include <iostream>
#include<cmath>
using mamespace std;

//定义内联函数distance
inlline double distance(double a,double b){
	return sqrt(a*a+b*b);
}

int main(){
	double k=6,m=9;
	cout << distance(k,m)<<endl; //内联函数,它与下面的语句等价!

   cout<<sqrt(k*k+m*m)<<endl;//编译后的样子
}

内联与宏的区别

#define square(int x) x*x//宏定义是先替换再计算
//例如:
b=square(4.5+7.5);//b=4.5+7.5*4.5+7.5;
//可以通过加括号来改进
#define square(int x) (x)*(x)


//即使加了括号,宏也不能按值传递
d=square(c++);//d=(c++)*(c++);
//c还是会递增两次

内联函数可以按值传递,宏不行,基本上宏在c++中不使用了。

使用内联函数的注意事项

  1. 不能递归
  2. 只有当函数只有 10 行甚至更少时才将其定义为内联函数.
  3. 当函数体比较小的时候, 内联该函数可以令目标代码更加高效. 对于存取函数以及其它函数体比较短, 性能关键的函数, 鼓励使用内联
  4. 滥用内联将导致程序变慢. 内联可能使目标代码量或增或减, 这取决于内联函数的大小. 内联非常短小的存取函数通常会减少代码大小, 但内联一个相当大的函数将戏剧性的增加代码大小. 现代处理器由于更好的利用了指令缓存, 小巧的代码往往执行更快。

内联函数与类,结构体
写不来,以后更,反正有关系。

引用变量
我们说的引用变量,实际上是给另一个变量取一个别名。例如,我们已经有了一个叫做 a ,将一个新的变量 b ,作为变量 a 的引用,相当于给 a 取了一个别名叫做 b 。

int rats;
int & rodents=rats;

在这里 & 不是取地址操作符,而是类型标识符的一部分。正如 char* , * 也是类型标识符的一部分,表示一个指向 char 类型的指针变量,而我们的 int& 表示一个指向 int 类型的引用变量。
这里的 rats和 rodents指向相同的值和内存单元。

引用变量和指针的区别
引用变量必须声明变量时进行初始化,指针可以先声明,赋值

int rats=101;
int & rodents=rats;
int * prats=&rats;

代码中rodents和*prats都可以同rats互换,&rodents和prats都可以同&rats互换。

注意:1.当引用变量在创建时进行初始化,引用更接近于const指针,一旦与某个变量关联起来,就会一起效忠于他。
2.即引用变量只能作为一个变量的引用,正如上面的 b ,当他成为 a 的引用之后,在他的生命周期里,就不能成为其他变量的引用

引用变量用作函数参数

int times;
grump(times);
void grump(int &x)//让x成为times变量的别名

//重点
void swap(int &a,int &b);
void swap(int *p,int *q);
void swap(int a,int b);
//一一对应
swap(wallet1,wallet2);
swap(&wallet1,&wallet2);
swap(wallet1,wallet2);//这个没用

第三种方法没有用,通过代码,可以很容易看出如何用作函数参数的,第二种是指针的地址传递,第一种是传递引用,运用原始数据。

引用的属性和特别之处
看primer上的知识点,我到这里看不懂了,涉及临时变量,引用参数和const。以后更新。。。。
8月29日晚。。。
有些上面没写,请参考以下文章:
内联函数
引用变量

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-30 11:49:20  更:2021-08-30 11:50:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/13 10:44:24-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码