首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C++ 字符串字面量到 const string& 的隱式轉換機制

     編輯:程式設計綜合問答

現象

void fun(const string &s); // OK: fun("hello")
void fun(string &s);       // Error: fun("hello")

標準規定

C++ Primer 5th §2.4.1:當引用類型與實參類型不匹配,且引用是 const 左值引用時,編譯器會創建一個臨時對象(類型為引用指向的類型),用實參初始化該臨時對象,再將引用綁定到臨時對象。

過程

  1. `"hello"` 類型為 `const char[6]`,隱式轉換為 `std::string` 臨時對象。
  2. `const string&` 綁定到該臨時對象,延長其生命周期至引用作用域結束。
  3. 非 const 引用 `string&` 不能綁定到臨時對象(C++ 標準禁止),故編譯錯誤。

實踐建議

  • 函數參數若不需修改,優先用 `const T&`,接受字面量、臨時對象、具名變量。
  • 需修改則用 `T&`,調用方必須傳入具名左值。
  • C++11 起可用 `string_view` 避免臨時對象構造開銷。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved