這篇文章主要介紹“C++使用X&&傳遞會發(fā)生什么”,在日常操作中,相信很多人在C++使用X&&傳遞會發(fā)生什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C++使用X&&傳遞會發(fā)生什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!
我們提供的服務(wù)有:做網(wǎng)站、網(wǎng)站制作、微信公眾號開發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認證、常寧ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問題。提供周到的售前咨詢和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的常寧網(wǎng)站制作公司
It's efficient and eliminates bugs at the call site: X&&
binds to rvalues, which requires an explicit std::move
at the call site if passing an lvalue.
對于調(diào)用者可以提供高效和排除bug的可能性:X&&綁定一個右值,當調(diào)用者傳遞左值是需要使用清楚的std::move操作。Example(示例)
void sink(vector&& v) { // sink takes ownership of whatever the argument owned // usually there might be const accesses of v here store_somewhere(std::move(v)); // usually no more use of v here; it is moved-from}
Note that the std::move(v)
makes it possible for store_somewhere()
to leave v
in a moved-from state.That could be dangerous.
注意:std::move造成store_somewhere執(zhí)行后,v變成移動后狀態(tài)。這可能很危險。
譯者注:危險在于移動后對象處于無效狀態(tài),一旦被使用則任何事情都可能發(fā)生。
獨占所有權(quán)類型只用于移動而且移動的成本很低,例如unique_ptr,可以使用容易編寫且(和移動操作)效果相同的傳值方式。傳值確實會生成一個額外的(低成本的)移動操作,但是這里優(yōu)先選擇簡單和清晰。
templatevoid sink(std::unique_ptr p) { // use p ... possibly std::move(p) onward somewhere else} // p gets destroyed
Flag all X&&
parameters (where X
is not a template type parameter name) where the function body uses them without std::move
.
提示所有函數(shù)體中沒有對其使用std::move操作的X&&參數(shù)(這里X不是模板類型參數(shù)名)。
Flag access to moved-from objects.
提示對移動后對象的訪問。
Don't conditionally move from objects
不要有條件對對象實施移動操作。
到此,關(guān)于“C++使用X&&傳遞會發(fā)生什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
文章題目:C++使用X&&傳遞會發(fā)生什么
文章起源:http://weahome.cn/article/gjidij.html