2016-12-13 42 views
2

使用我有兩個功能:的std ::裁判與模板函數和函數路過值

void fun(int k) { 
    ++k; 
} 

template<class T> 
void inc(T t) { 
    ++t; 
} 

而且我把這些功能用的std :: REF:

的那個值後p是5,o的值是6.當我用std :: ref爲這些函數調用函數時,有什麼區別?

+0

這不明顯嗎? – LogicStuff

回答

10

std::ref返回一個std::reference_wrapper,這是implicitly convertible到它打包的類型。

當調用fun(std::ref(p)),你是隱式轉換新裝箱std::reference_wrapperint,製作副本。

當調用inc(std::ref(p))時,您複製std::reference_wrapper本身,保留參考語義

+0

比我的回答更好。做得好。 – mascoj

+0

謝謝你的回答。 –