日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

内联函数inline

發布時間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 内联函数inline 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

結論在文章末尾處!

在C++中,為了解決一些頻繁調用的小函數大量消耗棧空間(棧內存)的問題,特別的引入了inline修飾符,表示為內聯函數。

內聯函數的處理方式是在函數的調用點直接代碼展開。在計算機系統下,假如頻繁的調用就會造成較大的時間開銷。內聯函數的引入減少了函數調用過程中開棧和清棧的開銷。

下面來看不使用內聯函數的時候:

#include<iostream>
using namespace std;int Add_int(int a, int b)
{return a + b;
}int main()
{int a = 10, b = 20;int c = Add_int(a,b);cout << "c" << "=" << c << endl;system("pause");return 0;
}

打開匯編:

?可以看到的是,先將b入棧,然后將a入棧,再通過call調用Add_int函數!

下面看一下使用內聯函數之后:

#include<iostream>
using namespace std;inline int Add_int(int a, int b)  //在函數前面加上inline
{return a + b;
}int main()
{int a = 10, b = 20;int c = Add_int(a,b);cout << "c" << "=" << c << endl;system("pause");return 0;
}

打開她的匯編:

?我們打開匯編之后發現還是和之前沒加內聯函數inline之前的匯編是一樣的,這是怎么回事呢,原來我們加沒加inline都是處在debug版本下,inline在debug版本下是不生效的,只有在release 版本下inline才生效,那么我們切換到release版本下再來打開匯編:

?我們發現就沒有了入棧那些個操作,直接在調用函數那塊就將函數展開了!

那么內聯函數有什么需要注意的呢?

1.nline函數一般寫在頭文件中。(當多文件使用到同一個inline函數,就得寫在頭文件中)

2.inline函數只在Release版本生效。在Debug版本是不生效。

3.inline函數只是給編譯器的一個建議。具體是否處理成inline函數是編譯器決定的。

第三點具體是怎樣的呢,如果說你的內聯函數體內有循環、判斷語句這種的話,就算是你加了內聯函數inline,編譯器也不會按照內聯函數進行處理,還有就是當內聯函數函數體過大時也不會按照內聯函數進行處理,這個過大沒個具體值,可能是多于十行或是20行,對于某些編譯器來說,當你給有判斷語句與循環語句或函數體大的函數加inline之后,會進行報錯(看編譯器)!

還有以一個需要注意的點就是內聯函數與宏的區別:

????????inline函數的處理時機是在編譯階段處理的,有安全檢查和類型檢查。而宏的處理是在預編譯階段處理的,沒有任何檢查機制,只是簡單的文本替換。inline函數是一種更安全的宏。

總結

以上是生活随笔為你收集整理的内联函数inline的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。