我知道關于這個論點有很多問題,但我仍然不了解關于右值的一些基本知識。
假設我有這種功能:
/* 1 */ void func( std::string s ) { /* do something with s */ }
我以這種方式使用:
int main()
{
func( "a string" );
}
在這種情況下,我將這個字串傳遞給函式func不會更好地總是以這種方式定義這種函式:
/* 2 */ void func( std::string&& s ) { /* do something with s */ }
我的問題是:在像本例這樣的情況下使用/* 2 */不是總是更好嗎?/* 1 */如果不是,我為什么以及在哪里使用其中一個?事實是,如果我理解得很好,/* 2 */引數被移動并且永遠不會在函式范圍之外使用,對吧?
uj5u.com熱心網友回復:
在您在呼叫時創建臨時字串的具體示例中,兩個運算式是等效的。
實際上,您不能同時保留兩者并使用多載解決方案,因為它們捕獲相同型別的物件(同樣,僅在您的示例中)。他們都可以捕獲臨時字串并在引數中提供它s。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/432109.html
上一篇:C 模板顯式右值型別
下一篇:C 行內初始化靜態函式成員
