網站首頁 編程語言 正文
inline函數
當程序執行函數調用時,系統要建立棧空間,保護現場,傳遞參數以及控制程序執行的轉移等等,
這些工作需要系統時間和空間的開銷。
請看如下程序段,讀入一行字符串,逐個判斷是否為數字字符:
#include<iostream>
using namespace std;
bool IsNumber(char ch)
{
return ch>= ?0? && ch <= ?9? ? 1 : 0;
}
int main()
{
char ch;
while(cin.get(ch), ch!= ? n?)
{
if (IsNumber(ch))
{
cout<<′′是數字字符 ′′<<endl;
}
else
{
cout<<′′不是數字字符 ′′<<endl;
}
}
return 0;
}
當函數功能簡單,使用頻率很高,為了提高效率,直接將函數的代碼嵌入到程序中。但這個辦法有缺點,一是相同代碼重復書寫,二是程序可讀性往往沒有使用函數的好。
為了協調好效率和可讀性之間的矛盾,C++提供了另一種方法,即定義內聯函數,方法是在定義函
數時用修飾詞inline
inline bool IsNumber(char ch)
{
return ch>='0'&&ch<='9'?1:0;
}
加inline關鍵字將其改成內聯函數,在編譯期間編譯器能夠在調用點內聯展開該函數。
實例
在debug模式下,設置編譯器。
要點
inline是一種以空間換時間的做法,省去調用函數額開銷。但當函數體的代碼過長或者是遞歸函數即便加上inline關鍵字,也不會在調用點以內聯展開該函數。
inline對于編譯器而言只是一個建議,編譯器會自動優化。
inline不建議聲明和定義分離,分離會導致鏈接錯誤。因為inline被展開,就沒有函數地址了,鏈接就會找不到。
建議
如果函數的執行開銷小于開棧清棧開銷(函數體較小 ),使用inline處理效率高。如果函數的執行開
銷大于開棧清棧開銷,使用普通函數方式處理。
原文鏈接:https://blog.csdn.net/qq_42795061/article/details/124762442
相關推薦
- 2022-11-24 詳解Linux中atime,mtime,ctime的使用場景_linux shell
- 2022-05-15 Redis中有序集合的內部實現方式的詳細介紹_Redis
- 2022-12-09 c++結合opencv如何實現讀取多張圖片并顯示_C 語言
- 2022-09-26 Linux查看操作系統的版本,關閉防火墻,主機名配置,時區時間配置
- 2022-08-04 Python?venv虛擬環境跨設備遷移的實現_python
- 2022-07-30 react組件的生命周期
- 2023-11-23 python獲取文件夾內所有文件并改名
- 2022-12-22 Nginx配置之main?events塊使用示例詳解_nginx
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支