inline 函數的深入解析

來源:互聯網
上載者:User

inline函數只是對編譯器的一種建議,編譯器可以選擇忽略這個建議,比如你將一個長達1000行的函數指定為inline,編譯器就hi忽略這個inline,將這個函數還原成普通函數。(百度百科中看的)。。

先貼幾個inline函數的例子吧:(百度百科中看的)

1.在類中定義這種函數:class ClassName{.........INT GetWidth(){return m_lPicWidth;}; // 如果在類中直接定義,不需要用inline修飾,編譯器自動化為內嵌函式....}2.在類外定義前加inline關鍵字:class Account {public:Account(double initial_balance) { balance = initial_balance; } //與1相同double GetBalance(); //在類中聲明double Deposit( double Amount );double Withdraw( double Amount );private:double balance;};inline double Account::GetBalance() { return balance; } //在類外定義時添加inline關鍵字inline double Account::Deposit( double Amount ) { return ( balance += Amount ); }inline double Account::Withdraw( double Amount ) { return ( balance -= Amount ); }此外還有一些規則需注意:1、inline說明對編譯器來說只是一種建議,編譯器可以選擇忽略這個建議。比如,你將一個長達1000多行的函數指定為inline,編譯器就會忽略這個inline,將這個函數還原成普通函數。2、在調用內嵌函式時,要保證內嵌函式的定義讓編譯器"看"到,也就是說內嵌函式的定義要在標頭檔中,這與通常的函數定義不一樣。但如果你習慣將函數定義放在CPP檔案中,或者想讓標頭檔更簡潔一點,可這樣做://SomeInline.h中#ifndef SOMEINLINE_H#define SOMEINLINE_Hinline Type Example(void);//........其他函數的聲明#include“SomeInlie.cpp” //源檔案尾碼名隨編譯器而定#endif//SomeInline.cpp中#include"SomeInline.h"Type Example(void){//..........}//...............其他函數的定義以上方法是通用、有效,可放心使用,不必擔心在標頭檔包含CPP檔案會導致編譯錯誤。 開始我從書上看到的:1:inline函數的Inline行為大多數的在C++程式中的編譯器行為。所以對所有的virtual函數來說,調用inlinine的意圖都會落空,因為virtual利用的是多態行為,在運行期才能確定調用那個函數。2:編譯器通常不對“通過函數指標而進行的調用”實施inlining3:不論編譯在建構函式或解構函式中做的工作是多麼的緊緻(代碼少),都要謹慎使用inlining,因為Derived函數至少一定會陸續調用其成員變數和base class兩者的建構函式或解構函式。。

4:inline函數無法隨著程式庫的升級而升級,如果f是一個inline函數,那麼如果f改變了,那麼所有用到f的用戶端程式都必須重新編譯。這往往是大家不願意看到的,然而如果f是non-Inline函數,一旦它有任何的修改,那麼用戶端只需重新串連就好,遠比重新編譯的負擔少的多,如果程式庫擦去動態串連,升級版的函數甚至可以不知不覺的唄應用程式吸納

5:大部分調試器面對inline函數都是束手無策的。畢竟你如何在一個並不存在的函數內設定斷點呢?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.