inline函式注意事項

2021-06-21 12:32:30 字數 1471 閱讀 8996

1.在類中定義這種函式:

class classname; // 如果在類中直接定義,不需要用inline修飾,

編譯器自動化為

內聯函式

.... //此說法在《c++ primer》中提及

.... }

2.在類外定義前加inline

關鍵字:

class account //與1相同

double getbalance(); //在類中宣告

double deposit( double amount );

double withdraw( double amount );

private:

double balance; };

inline double account::getbalance() //在類外定義時新增inline

關鍵字inline double account::deposit( double amount )

inline double account::withdraw( double amount )

此外還有一些規則需注意:

1、inline說明對

編譯器來說只是一種建議,編譯器可以選擇忽略這個建議。比如,你將乙個長達1000多行的函式指定為inline,

編譯器就會忽略這個inline,將這個函式還原成普通函式。

2、在呼叫

內聯函式時,要保證內聯函式的定義讓編譯器"看"到,也就是說內聯函式的定義要在標頭檔案中,這與通常的函式定義不一樣。但如果你習慣將函式定義放在cpp檔案中,或者想讓標頭檔案更簡潔一點,可這樣做:

中#ifndef someinline_h

#define someinline_h

inline type example(void);

//........其他函式的宣告

#include「someinlie.cpp」 //原始檔字尾名隨

編譯器而定

#endif

中#include"someinline.h"

type example(void)

//...............其他函式的定義

以上方法是通用、有效的,可放心使用,不必擔心在標頭檔案包含cpp檔案會導致編譯錯誤。

來自 inline函式是需要編譯器在遇到它的地方根據它的定義把它內聯展開的,而並非是普通函式那樣可以先宣告再鏈結的(內聯函式不會鏈結),所以編譯器就需要在編譯時看到內聯函式的完整定義才行。

如果內聯函式像普通函式一樣只能定義一次的話,這事兒就難辦了。因為在乙個檔案中還好,我可以把內聯函式的定義寫在最開始,這樣可以保證後面使用的時候都可以見到定義;但是,如果我在其他的檔案中還使用到了這個函式那怎麼辦呢?這幾乎沒什麼太好的解決辦法。

因此c++規定,內聯函式可以在程式中定義多次,只要內聯函式在乙個cpp檔案中只出現一次,並且在所有的cpp檔案中,這個內聯函式的定義是一樣的,就能通過編譯。那麼顯然,把內聯函式的定義放進乙個標頭檔案中是非常明智的做法。

memset函式注意事項

memset 函式是記憶體賦值函式,用來給某一塊記憶體空間進行賦值的。其原型是 void memset void dst,int val,size t size 使用時在檔案頭加上 include stdlib.h dst是目標起始位址,val是要賦的值,size是要賦值的位元組數。例1 char ...

printf函式注意事項

如果m為負數,則右對齊 右側補空白 printf 5d 88 輸出結果 88 如果m為正數,則左對齊 左側補空白 printf 5d 88 輸出結果 88 0md 表示,位數不足部分補 0 printf 05d 88 輸出結果 00088 常用於日期,處理等 printf f 1.0 3 輸出結果 ...

strcpy函式注意事項

用於複製字串的函式是strcpy,它的原型是 char strcpy char dst,char const src 這個函式把引數src字串複製到dst引數。如果引數src和dst在記憶體中出現重疊,其結果是未定義的,由於dst引數將進行修改,所以它必須是個字元陣列或者是乙個指向動態分配記憶體的陣...