2013-04-05 50 views
0

我看到這個早些時候,它沒有任何意義,我:這個函數對矢量的使用是無用的嗎?

void generate(std::vector<float> v) 
{ 
float f = generate_next_float(); 
v.push_back(f); 
} 

如果v作爲參考或指針,這將是有意義發送。但相反,它是通過價值發送的,因此被複制到該函數中,對嗎?因此,對v所做的任何操作都會在函數終止時立即失效,v超出範圍並被刪除。

我對不對?

也就是說,功能generate_next_float()可能會做一些事情,所以不是無用的,但在這裏使用vector似乎毫無意義。 f不依賴於它,並且不返回任何內容。

+1

取決於什麼副作用'generate_next_float()'了。 – 2013-04-05 00:34:29

+0

對,我編輯的問題和標題,以指定我指的是矢量 – johnbakers 2013-04-05 00:36:55

+0

我想知道你在哪裏看到這個?它看起來像多出來的代碼;有人忘記包含'&'。 – 2013-04-05 00:37:01

回答

0

是的,就矢量而言,generate()函數是毫無意義的;對v的更改將不會被調用者看到。

我有一種感覺的generate()筆者錯過了按引用傳遞的俯瞰,還不如:-)

0

好一個計劃,考慮性病容器不做隱式數據共享,這意味着你會通過一個新的深入拷貝到函數中,push_back浮動到新的拷貝中,然後在函數結束後被拋棄。所以,對我來說,看起來你是對的。

0

在這個函數中std :: vector v不會改變,因爲你沒有給vector作爲參考。它只是在函數內複製,複製被改變而不是原來的。您可以使用:

void generate(std::vector<float> &v) //input given as reference 
{ 
    float f = generate_next_float(); 
    v.push_back(f); 
}