亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C+中內聯函數的優點?

C+中內聯函數的優點?

C++
jeck貓 2019-06-25 16:22:07
C+中內聯函數的優點?在C+中使用內聯函數的優缺點是什么?我看到它只會提高編譯器輸出的代碼的性能,但是對于今天的優化編譯器、快速CPU、巨大內存等等(不像1980年那樣-內存稀缺,所有東西都必須裝在100 KB內存中)-它們今天到底有什么優勢?
查看完整描述

3 回答

?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

內聯函數的速度更快,因為您不需要像參數和返回地址那樣在堆棧上或從堆棧中推送和彈出內容;但是,它確實會使二進制文件稍微大一些。

這會有很大的不同嗎?對于大多數人來說,在現代硬件上還不夠明顯。但這會帶來一些不同,這對一些人來說已經足夠了。

在內線上做標記并不能保證它是內聯的。這只是對編譯器的建議。有時,這是不可能的,例如,當您有一個虛擬函數,或當有遞歸涉及。有時編譯器只是選擇不使用它。

我可以看到這樣的情況會產生明顯的不同:

inline int aplusb_pow2(int a, int b) {
  return (a + b)*(a + b) ;}for(int a = 0; a < 900000; ++a)
    for(int b = 0; b < 900000; ++b)
        aplusb_pow2(a, b);


查看完整回答
反對 回復 2019-06-25
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

在古C和C+中,inline就像register向編譯器提出關于可能的優化的建議(不過是建議)。

在現代C+中,inline告訴鏈接器,如果在不同的翻譯單元中找到多個定義(而不是聲明),它們都是相同的,鏈接器可以自由地保留其中一個,并丟棄所有其他的定義。

inline如果在頭文件中定義了一個函數(無論函數有多復雜或“線性”),則必須允許多個源包含它,而不需要鏈接器獲得“多個定義”錯誤。

默認情況下,類中定義的成員函數是“內聯”函數,模板函數也是(與全局函數相反)。

//fileA.hinline void afunc(){ std::cout << "this is afunc" << std::endl; }//file1.cpp#include "fileA.h"void acall(){ afunc(); }//main.cpp#include "fileA.h"void acall();int main(){ 
   afunc(); 
   acall();}//outputthis is afuncthis is afunc

注意,在兩個.cpp文件中包含了fileA.h,從而導致了afunc()..鏈接器會丟棄其中一個。如果沒有inline如果指定了鏈接器,則鏈接程序將發出投訴。


查看完整回答
反對 回復 2019-06-25
  • 3 回答
  • 0 關注
  • 975 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號