關於Vector作為函式的返回值

2021-06-28 07:16:51 字數 1152 閱讀 2592

關於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...