亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

inline與lnk2001、lnk2019,雞肋?

系統 1974 0

inline函數居然出現了lnk2001、lnk2019,先貼代碼。

a.h
#pragma once
class A
{
public:

??? inline void foo();
??? void use_foo();
};

?
a.cpp
#include "A.h"

inline void A::foo()
{

}

void A::use_foo()
{
??? foo();//此行注釋掉會產生lnk2019錯誤
}


main.cpp
#include "A.h"

int main()
{
??? A a;
??? a.foo();
??? return 0;

}

?

看似簡單的程序,揭示出inline的使用限制:

1、在頭文件中,類成員函數聲明為inline時實現函數體,比如:
#pragma once
class A
{
public:

??? inline void foo(){};//實現了函數體即便是空的
??? void use_foo();

};

?

2、在頭文件和源文件中分開實現,此類源文件中的“任意非inline函數續”需調用過此函數,然后其他源文件中才可用,此時鏈接時不會出現lnk2001 lnk2019錯誤。

如:上面的a.cpp


兩種方法:

第一種缺點是破壞封裝,生成的庫拿給別人用總不希望被看到函數體的實現吧

第二種封裝性好,別人只能看到聲明,缺點是容易產生lnk錯誤。

其實編譯器盡量把頭文件中的帶實現的函數優化為inline,只要不帶循環之類的就可以不用聲明inline。

inline只有在達到一定調用頻率量級上才會顯得快。比如:Release編譯 /O2開啟,第一種10億次循環調用的差距大概在幾十毫秒。第二種反而比非inline慢幾到十幾毫秒。

結論:inline沒必要使用

如果是在頭文件中實現類函數體,inline關鍵字不必使用,因為編譯器默認會將頭文件實現的類函數盡量優化為inline,而且這種破壞封裝性,如果是編譯給別人用的庫還是算了。

如果是在源文件中實現類函數體,inline關鍵字不能用,因為你不能保證該源文件一定需要調用該函數,可能造成其它源文件的lnk2001 lnk2019鏈接錯誤。

如果追求極致性能又怕編譯器不靠譜,請在頭文件中聲明inline且同時實現函數體,即便如此,編譯器也會考量是否可編譯為inline函數,并且前提是優化選項開啟,比如VS的 /O2、g++的 -O2

本人僅在vs2012 release下做過簡單測試,歡迎交流。

?

inline與lnk2001、lnk2019,雞肋?


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 天天综合干 | 国产精品一区高清在线观看 | 97视频在线 | 免费一级毛片在线播放泰国 | 亚洲欧美一区二区三区不卡 | 国产成人综合日韩精品婷婷九月 | 日韩在线手机看片免费看 | 国产精品v欧美精品∨日韩 国产精品v一区二区三区 | 5388国产亚洲欧美在线观看 | 狠狠色噜噜狠狠狠狠97 | 日本大片免费一级 | 免费一级毛片不卡不收费 | 午夜爱爱小视频 | 国产99福利视频在线 | 国产精品入口麻豆高清在线 | 欧美久在线观看在线观看 | 国内精品视频一区二区八戒 | 色拍拍欧美视频在线看 | 99热久久国产精品这 | 爱做久久久久久久久久 | 国产色婷婷精品免费视频 | 国产福利精品在线 | 99热久久这里只精品国产9 | 福利色姬网站视频入口 | 99re这里只有精品66 | 狠狠色噜噜狠狠色综合久 | 深夜免费福利视频 | 国产深夜 | 亚洲国产一区二区三区最新 | 欧美成人h精品网站 | 亚洲色无码播放 | 国产在线视频你懂得 | 久久99热66这里只有精品一 | 欧美日穴 | 五月婷婷综合激情网 | 亚洲伦理中文字幕一区 | 日韩欧美网 | 99热最新在线 | 久久精品中文字幕第一页 | 国产手机在线视频放线视频 | 久久天堂夜夜一本婷婷麻豆 |