關於vector作為函式的返回值,有幾點需要說明:
1.首先如果vector是乙個區域性的變數,那麼返回該vector的引用是十分危險的,因為在vector超出作用域的,會自動呼叫相關的析構函式(~vector()),如果vector中存放的是類(classname)物件的指標,則不會呼叫相關的類classname析構函式,只會把相關的空間清空(也就是vector.size()=0),這樣會造成記憶體洩露。但是如果vector中存放的是類(classname)的物件,則會呼叫相關的類classname析構函式。所以如果vector是乙個區域性的變數,那麼返回該vector的引用是十分危險的,因為該vector已經被析構。
例子://在乙個函式中寫下如下**:
//其中testobject和ptestobject是成員變數,這樣做主要是便於測試
std:
:vector
testobjectvec;
testobjectvec.push_back(testobject)
;std::
vector
> ptestobjectvec;
ptestobject =
new ctestobject();
ptestobjectvec.push_back(ptestobject)
;//在函式執行結束的時候,會自動呼叫
ctestobject的析構函式一次,這是由於
testobjectvec析//構造成的,但是
ptestobjectvec的析構並沒有造成呼叫
ctestobject的析構函式
2.返回引用的時候需要注意,不能將函式宣告成 const,否則編譯不通過
例如:std::vector& getvec() const;//宣告
std::vector& classname1::getvec() const//error
//編譯錯誤
const std::vector& getvec() const;//宣告,這樣就可以了,也就是必須返回的是const的引用,才行,當然也可以兩頭都不用const!
2.如果不是區域性變數,可以返回引用或者該vector的迭代器(iterator)
vector作為函式返回型別
include include using namespace std vectorfun1 int num return values int main return 0 vector可以像普通變數那樣在函式體內宣告後返回 返回的是臨時物件 只能複製 不能返回他的引用和迭代器 如果vector 裡...
const 作為函式返回型別
const 作為函式返回型別,最終目的是希望呼叫函式時將返回值作為常量處理。細分為三種情況。const int getval void 該函式返回值裡的const其實是可有可無的。const int getptr void int main 函式返回為引用時,如果不想修改函式呼叫後的值,則用 con...
函式作為返回值
就像常見的函式一樣,lambda 表示式可以返回乙個函式指標 委託例項 這就意味著我們能夠使用乙個 lambda 表示式來建立並返回另乙個 lambda 表示式。這種行為在很多場景下都是非常有用的。我們先來看下面這個例子 1 func saymyname string language 2 10ca...