1. 程式人生 > >C++/C函數

C++/C函數

個數 oid 被調用 不是函數 聯合體 靜態成員函數 外連接 連接 全局常量

函數堆棧的三個用途:

1.進入函數前保存環境變量和返回地址;

2.進入函數時保存實參的拷貝;

3.保存函數體內的局部變量。

函數調用規範:定義函數實參壓棧,退棧以及堆棧釋放方式。

1._cdecl:函數默認規範,參數從右到左依次壓棧,便於可變參數函數,C++靜態成員函數和友元函數使用此規範。

2._thiscall:C++非靜態成員函數的默認規範,不能使用可變參數。當非靜態成員函數調用時,this指針直接保存在ECX寄存器中,而不是函數堆棧。

函數連接規範:

1.通用的C連接規範:

#ifndef _cplusplus

extern "C" {

#endif

#ifndef _cplusplus

}

#endif

函數參數:

1. C包括值傳遞和地址傳遞,C++增加了引用傳遞(引用的創建和銷毀不會調用對象的構造函數和析構函數)。

2. C無參函數需要使用void,否則認為接受任何類型和個數的參數。而C++無參數函數則表示不接受任何參數。

函數返回值:

1. C不加函數返回值類型的函數,統一當成int處理,而C++不允許沒有返回值類型。

2. C++返回值為引用,如果返回值為內部局部變量,則會導致引用無效內存。

3.返回值效率,如:

1). return String(a);

臨時變量創建並初始化在外部存儲區,省去了拷貝和析構開銷。

2). String result(a);

  return result;

result對象被創建,調用構造函數初始化。接著調用拷貝構造函數,把result對象復制到保存返回值的外部存儲區,最後在函數結束時調用析構函數銷毀result對象。

存儲類型:

全局變量和全局函數:extern

全局常量:static

局部變量: auto

register類型則加載到CPU寄存器中,減少和內存的交互開銷,一般為循環計數器。

連接類型:

1.外連接:在別的編譯單元中被調用,如全局變量和全局函數或者被extern修飾的全局常量。

2.內連接:僅在一個編譯單元被調用,如全局常量,static修飾的變量,類,匿名聯合體,typedef定義。

3.無連接:函數的局部變量或局部類。

C++/C函數