日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

C++ 函数的引用返回值

發布時間:2025/3/21 c/c++ 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C++ 函数的引用返回值 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
C++ 函數的引用返回值 2009-09-17 09:29

引用是給變量取一個別名,所以引用傳遞會直接進行變量本身的傳遞。它的最大好處是可以把別處對變量的改變保留下來,第二好處是它提高了性能:如果函數的返回值是一個引用,那么,如上文所說,它會節約一組構造、賦值和析構過程。但是,函數返回引用往往會帶來一些意想不到的錯誤:比如返回臨時變量的引用。
//一個錯誤的函數
int &Max(int i, int j)
{
  return i>j ? i : j;
}
  以上函數的錯誤在于,i和j在函數結束后會被釋放。對它們的引和也將失效。如果用這個返回值給別的變量賦值,將會獲得一個垃圾。VC++.Net會對以上return語句顯示警告。
  那么,如果返回一個全局變的引用呢?這當然是可以的,但是,一來程序設計中不建議使用過多的全局變量,二來全局變量即使不返回也可以訪問。這樣做的唯一用途就是把函數做右值來給其它變量賦值。
int m;//全局變量
int &MaxByGlobal(int i, int j)
{
  return m = i>j ? i : j;
}
int a, b, c;
c = MaxByGlobal(a, b);//用法一、用返回值賦值
MaxByGlobal(a, b); c = m;//用法二、不用返回值賦值
  當然,以上這個MaxByGlobal函數也不是一無是處,能用返回值來進行賦值會給程序帶來更好的可讀性。只是這樣的函數設計本身不被建議。
  那么,函數返回引用用得最多的就是返回形參了。因為形參可以用引用傳遞,引用的形參不是函數內部的局部變量,這樣做是可取的:
int &MaxByRef(int &i, int&j)
{
  return i>j ? i : j;
}
  上面這個函數和上文中的“int Max(int i, int j)”函數如此相似,但是它省去了三次構造、賦值和析構。
  另外一種用法就是在類的成員函數中返回類對象自身了,典型的是“operator +=”函數之類。
MyClass &MyClass::operator +=(const MyClass&other)
{
  //某些語句
  return *this;
}
  以上函數返回的是自身的引用。因為類的成員函數也可以寫成全局函數“MyClass &operator+=(MyClass &Left, const MyClass&right)”,而且在類成員函數的調用中實際存在著this指針的傳遞。所以,以上這個函數依然可以看作返回了形參的引用。
  對于返回引用的函數,還有一個好玩的現像。即返回值還可能可以被賦值。如“(a += b) =c;”這樣的形式。這種寫法明顯不倫不類,但是如果函數返回了非const的引用,這個表達式的確是合理的。所以,上面的“operator+=”函數還要修改一下,將返回值由“MyClass&”改為“constMyClass&”。
  返回引用并不是處處可用的,正如《引用傳遞的應用范圍》中提到的一樣:不能用引用來傳遞臨時值。有時候我們的確要產生一個臨時對象并返回它,那就不能返回引用。典型的有“operator+”函數:
const MyClass MyClass::operator +(const MyClass&other) const
{
  MyClass Temp;
  //某些語句
  return Temp;//這里只能返回對象,因為Temp必須是局部變量
}

利用引用作為函數的形參可以在調用函數的過程中不是用傳遞值的方式進行虛實結合,而是通過傳址方式使形參成為實參的別名,因此不生成臨時變量(實參的副本),減少了時間和空間的開銷。此外,如果重載函數的返回值是對象的引用時,返回的不是常量,而是引用所代表的對象,它可以出現在賦值號的左側而成為左值(leftvalue),可以被賦值或參與其他操作(如保留cout流的當前值以便能連續使用“<<”輸出)。

例如可以這樣定義String 類
String &String::operator =(const String&other)???

{??


if(this == &other)
return *this;


delete [] m_data;

int length =strlength(other.m_data);???
m_data = newchar[length+1];???????
strCopy(m_data, other.m_data);

return *this;
}

總結

以上是生活随笔為你收集整理的C++ 函数的引用返回值的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品视频h | 无遮挡无掩盖网站 | 亚洲激情专区 | 国产一区av在线 | 欧美视频在线一区 | 日韩av一二三区 | 18视频网站在线观看 | 亚洲视屏在线观看 | 日本在线免费视频 | 成人精品一区二区三区电影黑人 | 成人精品区 | 六月丁香久久 | 综合色播 | 日本不卡三区 | 7777在线视频 | 男女激情大尺度做爰视频 | 国产肉体ⅹxxx137大胆 | 在线观看国产一区二区三区 | 免费网站看av | 国产精品xxx视频 | 亚洲免费观看在线 | 国产一页 | 久久午夜伦理 | 国产精品亚洲成在人线 | 亚洲一区二区免费看 | 日韩成人福利 | 日韩专区在线 | 免费色站| 日韩av成人在线 | 妻色成人网 | 轮番上阵免费观看在线电影 | 在线视频欧美一区 | 精品免费 | 国产午夜福利一区二区 | 国产色网址 | 日本午夜激情视频 | 成人免费激情视频 | 国产一区二区三区麻豆 | 日本不卡高字幕在线2019 | h官场少妇第三部分 | 天天操天天草 | 国产精品激情偷乱一区二区∴ | 精品熟妇视频一区二区三区 | 女人18毛片毛片毛片毛片区二 | 午夜成人影片 | 91好色先生tv | 免费av在线电影 | 亚洲区一 | 色妞av | 久色网站 | 国产精品二区一区二区aⅴ污介绍 | 精品在线视频免费 | 日本aⅴ在线 | 日日操天天 | 69综合 | 欧美精品久久久久久久久久 | 国产级毛片 | 精品人妻aV中文字幕乱码色欲 | 色视频线观看在线播放 | 亚洲男人第一网站 | 制服 丝袜 综合 日韩 欧美 | 露出调教羞耻91九色 | 精品人伦一区二区三电影 | 黄色91免费| 91中文字幕在线观看 | 国产一级久久久久毛片精品 | 免费网站污 | 老女人性生活视频 | 欧美综合网 | 国产精品久久久久久久久久久久久久久 | 久久精品国产一区 | 国产欧美日韩免费 | 国产精品久久视频 | 公肉吊粗大爽色翁浪妇视频 | av网站在线免费 | 神马一区二区三区 | 男女视频在线观看免费 | 一级绝黄 | 亚洲日本三级 | 欧美精品久久久久久 | 91精品一区| 日韩在线观看视频免费 | 国产视频一区二区三区在线观看 | 久久综合色综合 | 欧美黄在线观看 | 欧美在线视频网 | 性猛交xxxx | 日韩视频久久 | 久久视频在线免费观看 | www.色哟哟 | 国产偷人爽久久久久久老妇app | 日日干天天爽 | 99精品国产成人一区二区 | 久久久天堂 | 男人添女人下部高潮视频 | 在线免费观看黄色片 | 91精品久久久久久久99蜜桃 | 日日夜夜狠狠干 | 啪啪免费网址 |