C++編程思想讀書筆記-9 內嵌函式

來源:互聯網
上載者:User

1 在C語言中使用宏可以提高程式效率,但宏容易出錯

在宏定義中,最好給變數打上括弧,否則容易出錯.

宏和普通函數是有區別的,普通函數是值傳遞或者地址傳遞,但宏是簡單地拷貝,特別參數是a++這種容易使a++多次執行

2 在宏裡,沒法表示類的作用範圍.所以類中不能使用宏.轉而使用內嵌函式

在類的聲明中直接寫上函數定義的預設是inline函數

內嵌函式和普通函數差不多,會受到編譯器的檢查參數列表和傳回值. 但在調用時可以直接將函數直接替換成函數體,減小調用開銷,

但是否內聯是編譯器決定的,即使明確寫上inline也可能不按內聯進行替換,下面兩種情況是明確不能內聯的:

1 函數體複雜,比如有迴圈就不能內聯,原因是複雜的函數體替換會削弱甚至不會帶來效能上的提高

2 顯示或隱式地取該函數地址,編譯器必須為函數體分配記憶體

3 向前引用

class F{public:int f() const { return g()+1; }int g() const {return 1;} }

C++規定: 只有在類聲明結束後,類中的內嵌函式才起作用

所以引用未聲明的內建函式是可以的

4 內聯無法取代宏的地方:

字串定義: 將任意標識符轉換成字串數組

#define F(s) cout<< #s << endl; s ;

標誌粘貼:

#define D1(x) int x##one; #define D2(x) int x##two; 

head.h

#ifndef HEAD_H#define HEAD_H#define F(s) cout<< #s << endl; s ;#define D1(x) int x##one; #define D2(x) int x##two;class Forward{        public:                int f() {return g() +1;}                int g() {return 1;}};#endif

main.cpp

#include <string>#include <iostream>#include "head.h"using namespace std;int main(){        F(cout << "abc" << endl;);        D1(num);        D2(num);        numone = 100;        numtwo = 200;        F(cout<<numone << ' ' << numtwo << endl;);        Forward f1;        cout << f1.f() << endl;        cout << f1.g() << endl;}

zhao@ubuntu:~/c++work/cpp9$ ./a.out 
cout << "abc" << endl;
abc
cout<<numone << ' ' << numtwo << endl;
100 200
2
1

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.