使用我有兩個功能:的std ::裁判與模板函數和函數路過值
void fun(int k) {
++k;
}
template<class T>
void inc(T t) {
++t;
}
而且我把這些功能用的std :: REF:
的那個值後p是5,o的值是6.當我用std :: ref爲這些函數調用函數時,有什麼區別?
使用我有兩個功能:的std ::裁判與模板函數和函數路過值
void fun(int k) {
++k;
}
template<class T>
void inc(T t) {
++t;
}
而且我把這些功能用的std :: REF:
的那個值後p是5,o的值是6.當我用std :: ref爲這些函數調用函數時,有什麼區別?
std::ref
返回一個std::reference_wrapper
,這是implicitly convertible到它打包的類型。
當調用fun(std::ref(p))
,你是隱式轉換新裝箱std::reference_wrapper
到int
,製作副本。
當調用inc(std::ref(p))
時,您複製std::reference_wrapper
本身,保留參考語義。
比我的回答更好。做得好。 – mascoj
謝謝你的回答。 –
這不明顯嗎? – LogicStuff