簡體   English   中英

C++:將字符串文字或變量傳遞給function

[英]C++: Pass string literal or variable to function

我有一個 function f ,它接受一個字符串作為輸入。 我通常想提供一個字符串文字,例如f("hello") 但是,我想實現另一個基於f的 function g

std::string f(const std::string&& x) {
  return x + " world";
}

std::string g(const std::string&& x) {
  std::string res = f(x);  // problem: rvalue reference to std::string cannot bind to lvalue of type std::string
  res += "!";
  return res;
}

int main() {
  std::string res_a = f("hello");
  std::string res_b = g("world");
  return 0;
}

我如何在 C++11/14 中以一種可以將f與字符串文字和變量一起使用的方式實現這一點?

解決 function 同時采用左值和右值引用的問題的通用方法是使用模板化函數,例如 -

template <typename T>
T f(T&& val) {
}

template <typename T>
T g(T&& val) {
  T some_val = f(std::forward<T>(val));
}

std::foward<T>(val)將左值作為左值轉發,將右值作為右值轉發,正如其名稱所暗示的那樣。

通過模板化 function,您可以確保此邏輯適用於任何類型,而不僅僅是字符串。

獲取只讀參數的傳統方法是通過const左值引用。

std::string f(const std::string& x)

這個經驗法則適用於許多類型,而不僅僅是std::string 主要的例外是不大於指針的類型(例如char )。

function 有一個const右值引用是相當不尋常的。 正如您所發現的,這會在嘗試將變量作為參數傳遞時增加難度。 const右值引用具有值,但在大多數情況下, const右值引用不如const lvaue 引用。 另請參見對 const 的右值引用是否有用?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM