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

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

何時應該為函數(shù)/方法編寫關鍵字“內(nèi)聯(lián)”?

何時應該為函數(shù)/方法編寫關鍵字“內(nèi)聯(lián)”?

C++ C
心有法竹 2019-06-03 16:50:14
何時應該為函數(shù)/方法編寫關鍵字“內(nèi)聯(lián)”?我什么時候應該寫關鍵字?inline用于C+中的函數(shù)/方法?在看到一些答案后,一些相關的問題:我什么時候該不在C+中為函數(shù)/方法編寫關鍵字“內(nèi)聯(lián)”?編譯器什么時候不知道什么時候使函數(shù)/方法‘內(nèi)聯(lián)’?如果一個應用程序是多線程當一個人為一個函數(shù)/方法寫“內(nèi)聯(lián)”時?
查看完整描述

4 回答

?
30秒到達戰(zhàn)場

TA貢獻1828條經(jīng)驗 獲得超6個贊

我想用一個令人信服的例子來解釋這篇文章中所有的偉大答案,以消除任何剩余的誤解。

給定兩個源文件,例如:

  • inline111.cpp:

    #include <iostream>void bar();inline int fun() {
      return 111;}int main() {
      std::cout << "inline111: fun() = " << fun() << ", &fun = " << (void*) &fun;
      bar();}
  • inline222.cpp:

    #include <iostream>inline int fun() {
      return 222;}void bar() {
      std::cout << "inline222: fun() = " << fun() << ", &fun = " << (void*) &fun;}

  • 案例A:

    編譯:

    g++ -std=c++11 inline111.cpp inline222.cpp

    輸出量:

    inline111: fun() = 111, &fun = 0x4029a0inline222: fun() = 111, &fun = 0x4029a0

    討論:

    1. 即使您應該對內(nèi)聯(lián)函數(shù)有相同的定義,如果情況并非如此,C+編譯器也不會標記它(實際上,由于單獨匯編它沒有辦法檢查)。確保這一點是你自己的責任!

    2. 鏈接器不抱怨一種定義規(guī)則,如fun()被宣布為inline..但是,因為inline111.cpp是第一個翻譯單元(它實際上調(diào)用fun())由編譯器處理,編譯器實例化fun()在它第一打電話inline111.cpp..如果編譯器決定擴大fun()應您程序中其他任何地方的要求(G.從…inline222.cpp)的電話fun()將始終鏈接到其生成的實例。inline111.cpp(電話:fun()內(nèi)inline222.cpp也可以在該翻譯單元中生成一個實例,但它將保持不鏈接)。事實上,這一點從相同的&fun = 0x4029a0打印出來。

    3. 最后,盡管inline對編譯器的建議實際擴展一條龍fun(),它視而不見你的建議很清楚,因為fun() = 111在這兩條線上。


  • 案例B:

    編譯 (通知反向命令):

    g++ -std=c++11 inline222.cpp inline111.cpp

    輸出量:

    inline111: fun() = 222, &fun = 0x402980inline222: fun() = 222, &fun = 0x402980

    討論:

    1. 這個案例證明了案件A.

    2. 注意一個重要的問題,如果您注釋掉實際調(diào)用fun()在……里面inline222.cpp (G.注釋掉cout-聲明inline222.cpp完全)那么,盡管你的翻譯單位的匯編順序,fun()中的第一次調(diào)用時將被實例化。inline111.cpp的打印結果案例Binline111: fun() = 111, &fun = 0x402980.


  • 案例C:

    編譯 (公告-O2):

    g++ -std=c++11 -O2 inline222.cpp inline111.cpp

    g++ -std=c++11 -O2 inline111.cpp inline222.cpp

    輸出量:

    inline111: fun() = 111, &fun = 0x402900inline222: fun() = 222, &fun = 0x402900

    討論:

    1. 原樣

      在此描述-O2

      優(yōu)化鼓勵編譯器

      實際擴展

      可以內(nèi)聯(lián)的函數(shù)(也請注意,

      -fno-inline

      違約

      沒有優(yōu)化選項)。從這里的輸出可以看出,

      fun()

      實際上

      內(nèi)聯(lián)擴展

      (根據(jù)它的定義

      特別

      翻譯股),產(chǎn)生兩個

      異類 fun()

      打印出來。盡管如此,還是有

      只有一個

      全局鏈接實例

      fun()

      (按照標準的要求),從

      完全相同 &fun

      打印出來。


查看完整回答
反對 回復 2019-06-03
?
Qyouu

TA貢獻1786條經(jīng)驗 獲得超11個贊

什么時候我不應該為C+中的函數(shù)/方法寫關鍵字“內(nèi)聯(lián)”呢?

如果函數(shù)是在.cpp檔案,你應該寫關鍵字。

編譯器什么時候不知道什么時候使函數(shù)/方法‘內(nèi)聯(lián)’?

沒有這樣的情況。編譯器不能使函數(shù)內(nèi)聯(lián)。它所能做的就是內(nèi)聯(lián)一些或所有對函數(shù)的調(diào)用。如果它沒有函數(shù)的代碼,它就不能這樣做(在這種情況下,鏈接器需要這樣做,如果它能夠這樣做的話)。

當一個應用程序為函數(shù)/方法寫“內(nèi)聯(lián)”時,應用程序是否是多線程的?

不,那根本不重要。


查看完整回答
反對 回復 2019-06-03
  • 4 回答
  • 0 關注
  • 647 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號