inline及指针基础

#include<iostream> using namespace std; void SwapWayOne(int* x, int* y){ int temp = 0; temp = *x; *x = *y; *y = temp; } void SwapWayTwo(int &x, int &y){ int temp = 0; temp = x; x = y; y = temp; } void failedSwapWay(int x, int y){ int temp = 0; temp = x; x = y; y = temp; } inline void inlineSwapWayOne(int* x, int* y){ //address of x: 0x6ffde0, address of y: 0x6ffde8 cout << "address of x: " << &x << ", " << "address of y: " << &y << endl; //value of address x: 0x6ffe0c, value of address y: 0x6ffe08 cout << "value of address x: " << *(&x) << ", " << "value of address y: " << *(&y) << endl; //value of address x: 0x6ffe0c, value of address y: 0x6ffe08 cout << "value of address x: " << x << ", " << "value of address y: " << y << endl; //value of x: 5, value of y: 9 cout << "value of x: " << *x << ", " << "value of y: " << *y << endl; int temp = 0; temp = *x; *x = *y; *y = temp; } inline void inlineSwapWayTwo(int &x, int &y){ //address of x: 0x6ffe0c, address of y: 0x6ffe08 cout << "address of x: " << &x << ", " << "address of y: " << &y << endl; //value of x: 5, value of y: 9 cout << "value of x: " << *(&x) << ", " << "value of y: " << *(&y) << endl; //value of x: 5, value of y: 9 cout << "value of x: " << x << ", " << "value of y: " << y << endl; int temp = 0; temp = x; x = y; y = temp; } inline void failedSwapThoughInline(int x, int y){ int temp = 0; temp = x; x = y; y = temp; } int main(){ int numA = 5, numB = 9; cout << "Original order: " << numA << ", " << numB << endl; // failedSwapWay(numA, numB); // SwapWayOne(&numA, &numB); // SwapWayTwo(numA, numB); // inlineSwapWayOne(&numA, &numB); inlineSwapWayTwo(numA, numB); // failedSwapThoughInline(numA,numB); // inline function's scope is still inside! cout << "After changed: " << numA << ", " << numB <<endl; return 0; }

1|0由上方测试可知:

  1. 对于内联函数,C++有可能直接用函数体代码来替代对函数的调用,这一过程称为函数体的内联展开。
  2. 对于只有几条语句的小函数来说,与函数的调用、返回有关的准备和收尾工作的代码往往比函数体本身的代码要大得多。因此,对于这类简单的、使用频繁的小函数,将之说明为内联函数可提高运行效率。
  3. 内联函数是直接复制“镶嵌”到主函数中去的,就是将内联函数的代码直接放在内联函数的位置上,这与一般函数不同,主函数在调用一般函数的时候,是指令跳转到被调用函数的入口地址,执行完被调用函数后,指令再跳转回主函数上继续执行后面的代码;而由于内联函数是将函数的代码直接放在了函数的位置上,所以没有指令跳转,指令按顺序执行。
  4. 内联函数作用域仍旧在函数体内。




作者:艾孜尔江·艾尔斯兰


__EOF__

本文作者艾孜尔江
本文链接https://www.cnblogs.com/ezhar/p/13760342.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   艾孜尔江  阅读(183)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 25岁的心里话
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示