第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

為什么標(biāo)頭中包含C ++內(nèi)聯(lián)函數(shù)?

為什么標(biāo)頭中包含C ++內(nèi)聯(lián)函數(shù)?

C++
動(dòng)漫人物 2019-10-15 09:36:50
注意:這不是關(guān)于如何使用內(nèi)聯(lián)函數(shù)或它們?nèi)绾喂ぷ鞯膯栴},更多的是為什么要按原樣完成它們。類成員函數(shù)的聲明不需要將函數(shù)定義為inline,而只是函數(shù)的實(shí)際實(shí)現(xiàn)。例如,在頭文件中:struct foo{    void bar(); // no need to define this as inline}那么,為什么一類功能的內(nèi)嵌實(shí)施有是在頭文件?為什么不能將內(nèi)聯(lián)函數(shù)放在.cpp文件中?如果我嘗試將內(nèi)聯(lián)定義放入.cpp文件中,則會(huì)出現(xiàn)以下錯(cuò)誤:error LNK2019: unresolved external symbol "public: void __thiscall foo::bar(void)"(?bar@foo@@QAEXXZ) referenced in function _main 1>C:\Users\Me\Documents\Visual Studio 2012\Projects\inline\Debug\inline.exe : fatal error LNK1120: 1 unresolved externals
查看完整描述

3 回答

?
手掌心

TA貢獻(xiàn)1942條經(jīng)驗(yàn) 獲得超3個(gè)贊

有兩種查看方式:

  1. 內(nèi)聯(lián)函數(shù)在標(biāo)頭中定義,因?yàn)闉榱藘?nèi)聯(lián)函數(shù)調(diào)用,編譯器必須能夠看到函數(shù)主體。為了使天真的編譯器做到這一點(diǎn),函數(shù)主體必須與調(diào)用位于同一轉(zhuǎn)換單元中。(現(xiàn)代的編譯器可以跨翻譯單元進(jìn)行優(yōu)化,因此即使函數(shù)定義位于單獨(dú)的翻譯單元中,也可以內(nèi)聯(lián)函數(shù)調(diào)用,但是這些優(yōu)化是昂貴的,并不總是啟用的,并且也不一定總是受支持。編譯器)

  2. 必須標(biāo)記標(biāo)inline頭中定義的函數(shù),因?yàn)榉駝t,包含標(biāo)頭的每個(gè)翻譯單元將包含該函數(shù)的定義,并且鏈接程序?qū)⒈г苟鄠€(gè)定義(違反“一個(gè)定義規(guī)則”)。的inline關(guān)鍵字抑制此,允許多個(gè)翻譯單元包含(相同)的定義。

這兩種解釋確實(shí)可以歸結(jié)為以下事實(shí):inline關(guān)鍵字不能完全滿足您的期望。

C ++編譯器可以隨時(shí)隨地應(yīng)用內(nèi)聯(lián)優(yōu)化(將函數(shù)調(diào)用替換為被調(diào)用函數(shù)的主體,以節(jié)省調(diào)用開銷),只要它不會(huì)改變程序的可觀察行為即可。

inline關(guān)鍵字使得它更容易讓編譯器應(yīng)用此優(yōu)化,通過允許函數(shù)定義在多個(gè)翻譯單元是可見的,但使用關(guān)鍵字并不意味著編譯器內(nèi)聯(lián)函數(shù),而不是使用關(guān)鍵字不禁止編譯器內(nèi)聯(lián)函數(shù)。


查看完整回答
反對(duì) 回復(fù) 2019-10-15
  • 3 回答
  • 0 關(guān)注
  • 499 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)