C++/C函數

來源:互聯網
上載者:User

標籤:typedef   cal   析構   堆棧   引用   全域變數   載入   記憶體   this   

函數堆棧的三個用途:

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函數

聯繫我們

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