C lambda 表達式的類型推斷能夠讓編譯器確定 lambda 的回傳值類型:如果 lambda 只有一個 return 語句,則傳回值類型為 return 表達式的類型。如果 lambda 有多個 return 語句,則傳回類型為這些類型之一(編譯器可能發出警告)。如果沒有 return 語句,則傳回值類型為 void。
C 中Lambda 表達式的型別推論
Lambda 表達式是C 中一種強大的語法功能,它允許在運行時建立匿名函數。 Lambda 表達式的類型推斷是一個關鍵特性,它使編譯器能夠確定 lambda 表達式的回傳值類型。
語法
Lambda 表達式通常使用下列語法定義:
auto lambda = [capture list] (parameter list) -> return-type { // lambda function body }
其中:
是一個可選的捕獲列表,指定lambda 表達式可以存取的外部變數。
是一個可選的參數列表,指定 lambda 表達式接收的參數。
是一個可選的回傳型別指定符,指定 lambda 表達式的回傳值型別。
類型推斷
如果未指定回傳值類型,編譯器會嘗試根據lambda 表達式中的下列規則推斷它: 語句,則傳回值型別為
return 表達式的型別。
語句,但它們傳回不同類型的值,則傳回值類型為這些類型中的任何一個。在這種情況下,編譯器可能會發出警告。
語句,則傳回值類型為
void。
實戰案例
案例1:使用型別推斷
以下lambda 表達式使用型別推斷,傳回值類型為int:
auto lambda = [] (int a, int b) { return a + b; };
#案例2:指定傳回值類型
以下lambda 表達式明確指定傳回值類型為std::string:
auto lambda = [] (std::string a, std::string b) -> std::string { return a + b; };
案例3:推斷多重回傳類型
以下lambda 表達式包含兩個return 語句,回傳類型推斷為
int 或
std::string:
auto lambda = [] (int a, std::string b) { if (a < 0) { return a; } else { return b; } };
以上是C++ Lambda 表達式如何進行型別推斷?的詳細內容。更多資訊請關注PHP中文網其他相關文章!