c中怎麼理解類內定義的成員函式就是行內函數

2021-05-14 08:36:48 字數 3831 閱讀 9033

1樓:波多貝羅的巫師

在類內定義的成員函式預設為inline,不論前面是否加了inline,當然,是否內聯還是取決於編譯器啦~而在類外定義的成員函式就不是行內函數。

c++中怎麼理解類內定義的成員函式就是行內函數?

2樓:匿名使用者

當你的class。public成員函式宣告的時候,只要這個函式體當中不存在switch等迴圈語句的時候,則這個函式體無論是在類的內部還是類的外部,這個成員函式在編譯器看來,都等同於inline 行內函數了。

3樓:手機使用者

好像inline現在確實很少用了,編譯器都越來越智慧了

tenglvjun說的對,編譯器是否把函式編成內聯,它有自己的判斷,並不會因為你寫了inline就一定是內聯.就和register一樣,並不是加了register,編譯器就一定會把變數放到暫存器中

4樓:扶範西門靈秀

在類內定義的成員函式預設為inline,不論前面是否加了inline,當然,是否內聯還是取決於編譯器啦~而在類外定義的成員函式就不是行內函數。

c++ 成員函式是不是都是行內函數

5樓:匿名使用者

當然不是,或者說,除非特殊的inline宣告,類成員函式都不是行內函數。

c++中行內函數是什麼意思?

6樓:匿名使用者

行內函數具有一般函式的特性,它與一般函式所不同之處只在於函式呼叫的處理。一般函式進行呼叫時,要將程式執行權轉到被呼叫函式中,然後再返回到呼叫它的函式中;而行內函數在呼叫時,是將呼叫表示式用行內函數體來替換。在使用行內函數時,應注意如下幾點:

1.在行內函數內不允許用迴圈語句和開關語句。

如果行內函數有這些語句,則編譯將該函式視同普通函式那樣產生函式呼叫**,遞迴函式(自己呼叫自己的函式)是不能被用來做行內函數的。行內函數只適合於只有1~5行的小函式。對一個含有許多語句的大函式,函式呼叫和返回的開銷相對來說微不足道,所以也沒有必要用行內函數實現。

2.行內函數的定義必須出現在行內函數第一次被呼叫之前。

3.本欄目講到的類結構中所有在類說明內部定義的函式是行內函數。

7樓:匿名使用者

在類宣告的內部宣告或定義的成員函式叫做內聯(inline)函式.

有兩種實現方式:

1.在類宣告的內部宣告,而在類宣告外部定義叫做顯式行內函數,如:

class display

display object;

inline void display::output(void)2.在類宣告的內部定義,叫做隱式行內函數,如:

class display

} 引入行內函數的目的是為了解決程式中函式呼叫的效率問題。

函式是一種更高階的抽象。它的引入使得程式設計者只關心函式的功能和使用方法,而不必關心函式功能的具體實現;函式的引入可以減少程式的目標**,實現程式**和資料的共享。但是,函式呼叫也會帶來降低效率的問題,因為呼叫函式實際上將程式執行順序轉移到函式所存放在記憶體中某個地址,將函式的程式內容執行完後,再返回到轉去執行該函式前的地方。

這種轉移操作要求在轉去前要保護現場並記憶執行的地址,轉回後先要恢復現場,並按原來儲存地址繼續執行。因此,函式呼叫要有一定的時間和空間方面的開銷,於是將影響其效率。特別是對於一些函式體**不是很大,但又頻繁地被呼叫的函式來講,解決其效率問題更為重要。

引入行內函數實際上就是為了解決這一問題。

8樓:悟葛戰芮安

這最初是用來取代引數巨集的,因為巨集是由前處理器處理,編譯器並不知情,所以會存在一定問題,故設計行內函數來取代帶引數的巨集,以由編譯器接管這一「職務」,這樣就能進行型別檢查,且不會對引數進行多次求值。

但一般情況inline關鍵字只是給編譯器的建議,編譯器若認為函式足夠複雜(即函式體的開銷遠遠高於函式呼叫的開銷),則不會進行內聯。

類中宣告的函式是行內函數嗎? 是類內宣告 類外定義啊!

9樓:匿名使用者

在類中定義的成員函式全部預設為行內函數。可以顯示加上 inline 識別符號。或者不加

在類中宣告的成員函式,如果沒加inline。則在類外定義該成員函式時加了inline,該成員函式也為行內函數。

綜上所述:不管是宣告還是定義,只要看見有 inline ,都為內聯

10樓:

可以的,區別是類中您給出了函式體,不但是進行了宣告,而且進行了定義,且這個建構函式是內聯的(inline)。內聯可以讓**執行效率更高,但只限於函式體中**較簡單才適合用內聯,通常區分就看你用不用if,case,while這些控制流,用的話最好還是別直接在類中定義,即:別使用內聯。

c++求助什麼叫類體內定義成員函式

11樓:匿名使用者

class student

{public:

void display(){cou<<"num: "<

c++成員函式的行內函數能否在類外宣告?

12樓:匿名使用者

我想你把函式的定義和宣告兩個概念混淆了,可以定義在外面,但是宣告肯定是在類內啊。

// 標頭檔案

class a

// 定義檔案

inline void a::foo(int x, int y) // 表明是一個行內函數

// 若是定義在類內,就是隱式內聯了,比如class a}

13樓:

可以,不過類內必須要有函式宣告

mfc自動生成的文件/檢視程式就有這樣的函式,一般類的成員函式,寫在類外的部分稱為定義,即函式的實現**!只要#include相應的標頭檔案,類的公開成員就可以使用了!私有成員,類自己和友元可用,保護成員子類也可用!

c++在類外部定義的成員函式是不是inline函式,沒有在內部宣告為inline

14樓:薩珺堵雁山

寫在類體內的成員函式和inline開頭寫在類外的成員函式,以及inline開頭的非類成員函式是行內函數

15樓:

etiu2009你的概念有誤,你可以去翻c++ primer,在類內定義的函式預設為inline。

對於簡單的函式,前面可以顯式加上inline表示是行內函數,這樣編譯器就會在呼叫處**,提高執行效率。你在成員函式前加inline,在類外定義還是行內函數。不過這只是一種請求式的宣告,因為一個有幾百行或者迴圈的函式是不可能inline的。

16樓:匿名使用者

是否 inline 和是否在類內部定義沒有必然的聯絡。

你可以在你的函式頭部加上 inline 關鍵字強制開啟內聯,但編譯器仍然會對此做優化。

即使沒有加 inline 關鍵字的函式,如果呼叫次數不多或者**很簡單,編譯器會自動把它轉為 inline;反之亦然,即使加了 inline 關鍵字,某些呼叫頻繁或**比較複雜的函式,編譯器亦然會把它專為非 inline。

c++為什麼行內函數要加"函式名::"它不是在類中宣告的嗎

17樓:匿名使用者

ta說三國裡誰最會收買人心, 連極會用人的曹操都不如他2017-05-22 21:05「21世紀什麼最貴?人才!

」張繡對賈詡「執父禮」,劉備三顧茅廬,都是把人才擺在第一位。《三國演義》這本書告訴你,人才是有多重要。根據《襄陽記》記載,龐德公稱諸葛孔明為臥龍,龐士元為鳳雛,司馬德操為水鏡,《三國演義》中徐庶曾對劉備說「臥龍鳳雛,得一而可安天下!

」...詳情

C 求助什麼叫類體內定義成員函式

class student public void display cou num c 中怎麼理解類內定義的成員函式就是行內函數?當你的class。public成員函式宣告的時候,只要這個函式體當中不存在switch等迴圈語句的時候,則這個函式體無論是在類的內部還是類的外部,這個成員函式在編譯器看來...

C 成員函式的使用有哪些限制,C 類成員函式什麼情況下必須定義引數?

必須為其指標所指向的物件分配記憶體才可以進行strcpy操作。如果沒有分配記憶體,則 strcpy pname,p 把p複製到 沒有記憶體存放!這可能會導致未知的情況發生,程式會崩潰.以下是修改後的程式。注 用構造分配記憶體 new 必須要用析構 delete 釋放記憶體,否則會造成記憶體洩露 me...

c類T,裡面的成員T a建構函式中,a如何

我們把c 11以後的baic 叫做現代c du如果 你用舊c 那zhi麼你dao可以用這版種語法 a t 或權 a 如果你用現代c 那麼儘量使用這種語法 a t 如果要在堆內分配記憶體,加上new 關鍵字。但是一旦使用了new,一定要使用智慧指標unique ptr shared ptr或weak ...