C++按值返回、按址返回、按別名返回開銷的區別
好久木有寫部落格了,前一段時間忙著畢業論文和答辯。最近對遊戲開發方面比較有興趣,就學習了一下C++,因為很多遊戲引擎都支援C++。花了幾天的時間基本系統的學習了一下C++的語法規範,看得是範類的C++視訊教程。這裡附上網盤地址:http://pan.baidu.com/s/1c0lB1Pu ,廢話不多說鳥,看下面
分別用程式碼表示一下三種返回:
A fn1(A a) //按值返回
A* fn3(A *a)//按址返回
A& fn2(A &a)//按別名返回
三個函式看起來產不多,但造成的開銷是不同的。按址返回和按別名返回的開銷是一樣的,都比較小,按值返回的開銷則比較大。因為這裡演示的按值返回不管是傳參或者返回時,都會呼叫類A的複製建構函式,建立一個類A的副本,將原物件的成員資料一個個拷貝到副本上,加入類A的成員資料很大的話,迴圈呼叫多幾次這個函式造成的開銷是不估量的,下面就用程式碼演示一下;
首先定義一個A類,和按值返回
#include <iostream>
using namespace std;
class A
{
public:
A(int j){ cout << "建構函式ggg" << endl; this->i = j; }
A(A const &a){ cout << "複製建構函式fff" << endl; this->i = a.i; i++; }//加const關鍵字保證原物件的資料不被修改
~A(){ cout << "解構函式xxx" << endl; }
int get(){ return this->i; }
private:
int i;
};
A fn1(A a) //按值返回
{
cout << a.get() << endl;
return a;
}
void main()
{
A a(4);
A b(4);
cout << a.get() << endl;
b = fn1(a);
cout << b.get() << endl;
system("pause");
}
結果:
按址返回:
A* fn3(A *a)//按址返回
{
cout << a->get() << endl;
return a;
}
void main()
{
A c(4);
cout << c.get() << endl;
A &d = fn2(c);
cout << d.get() << endl;
system("pause");
}
結果:
按別名返回:
A& fn2(A &a)//按別名返回
{
cout << a.get() << endl;
return a;
}
void main()
{
A c(4);
cout << c.get() << endl;
A &d = fn2(c);
cout << d.get() << endl;
system("pause");
結果:
從結果可以看出來按 址返回和按地址返回的開銷是一樣的
相關文章
- 對於返回值型別不確定的函式如何限定返回值型別型別函式
- JavaScript 點選按鈕返回底部JavaScript
- 多型中的返回值型別多型型別
- jQuery返回頂部按鈕詳解jQuery
- 微信小程式開發中按下自己手機的返回按鍵是直接退出小程式而不是返回上級頁面微信小程式
- 談導航欄返回按鈕的替代方案
- iOS隱藏導航欄的返回按鈕iOS
- 自定義導航欄返回按鈕導致返回手勢失效問題
- js中的typeof返回值的所有型別JS型別
- MySQL 按指定 ID 順序返回結果MySql
- JavaScript點選按鈕返回底部詳解JavaScript
- Mysql按指定 ID 順序返回結果MySql
- JavaScript返回上一頁程式碼區別JavaScript
- js中typeof的返回值型別有哪些JS型別
- JavaSE 形參和返回值(引用型別)Java型別
- 淘寶/天貓按分類搜直播介面 API 返回值說明API
- 京東按關鍵字搜尋商品 API 返回值說明API
- 返回hash 型別的json型別JSON
- 原始碼 | 靜態工廠返回宣告的返回型別的子型別的例項原始碼型別
- 小程式沒有返回按鈕怎麼辦?
- 形式引數和返回值型別的對比型別
- PHP實現強型別函式返回值PHP型別函式
- Laravel 返回值Laravel
- typeof返回值
- phpexplode()返回值PHP
- iOS開發:給UIWebview的導航欄新增返回、關閉按鈕iOSUIWebView
- 亞馬遜國際按關鍵字搜尋商品 API 返回值說明亞馬遜API
- 如何在Typescript中定義Promise的返回值型別TypeScriptPromise型別
- Android實現點選兩次返回鍵和長按返回鍵退出應用實踐Android
- 函式的返回值函式
- Js 的 typeof 返回值JS
- 跟隨滾動條漂浮的返回頂部按鈕效果
- c++函式引數和返回值C++函式
- Android按下返回鍵,將應用退到後臺Android
- CSS3模擬實現iphone返回按鈕效果CSSS3iPhone
- 淘寶/天貓按圖搜尋淘寶商品(拍立淘) API 返回值說明API
- 阿里巴巴按關鍵字搜尋商品 API 返回值說明阿里API
- 唯品會按關鍵字搜尋vip商品 API 返回值說明API