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引數將進行修改,所以它必須是個字元陣列或者是乙個指向動態分配記憶體的陣...