Lambda 表達式中,預設參數允許指定參數預設值,而可變參數則允許傳遞數量不定的參數。預設參數應緊跟必選參數,而可變參數必須是函數參數中最後一個。這些功能可以簡化程式碼並提高可讀性,例如在處理字串清單時添加前綴和後綴。
C 函數預設參數和可變參數在Lambda 表達式中的應用
Lambda 表達式是一種匿名函數,它允許在運行時創建函數。我們可以使用預設參數和可變參數來增強 Lambda 表達式的功能。
預設參數
預設參數允許我們為 Lambda 運算式的參數指定預設值。如果呼叫時未提供參數,將使用預設值。
int add(int a, int b = 10) { return a + b; } int main() { auto sum = [](int a, int b) { return a + b; }; // 无默认参数 auto sumWithDefaultValue = [](int a, int b = 10) { return a + b; }; // 有默认参数 cout << sum(5, 6) << endl; // 输出: 11 cout << sumWithDefaultValue(5) << endl; // 输出: 15 return 0; }
可變參數
可變參數允許我們將數量不定的參數傳遞給 Lambda 表達式。可變參數必須是函數參數中的最後一個參數,並且使用 ...
表示。
int sumAll(int n, ...) { va_list args; va_start(args, n); int sum = n; for (int i = 0; i < n; i++) { sum += va_arg(args, int); } va_end(args); return sum; } int main() { auto sumAllLambda = [](int n, ...) { va_list args; va_start(args, n); int sum = n; for (int i = 0; i < n; i++) { sum += va_arg(args, int); } va_end(args); return sum; }; cout << sumAll(3, 1, 2, 3) << endl; // 输出: 9 cout << sumAllLambda(4, 4, 5, 6, 7) << endl; // 输出: 22 return 0; }
實戰案例
我們可以使用預設參數和可變參數來簡化程式碼並提高可讀性。例如,考慮一個處理字串清單的函數:
void processStrings(const vector<string>& strings, string defaultPrefix = "", string defaultSuffix = "") { for (const auto& str : strings) { cout << defaultPrefix << str << defaultSuffix << endl; } } int main() { vector<string> names = {"John", "Mary", "Bob"}; cout << "Prefix: \"Mr\", Suffix: \".\"" << endl; processStrings(names, "Mr", "."); // 使用默认参数 cout << "Prefix: empty, Suffix: \"!\"" << endl; processStrings(names, "", "!"); // 只使用可变参数 cout << "No prefix or suffix" << endl; processStrings(names); // 使用所有默认值 return 0; }
輸出:
Prefix: "Mr", Suffix: "." Mr.John. Mr.Mary. Mr.Bob. Prefix: empty, Suffix: "!" John! Mary! Bob! No prefix or suffix John Mary Bob
以上是C++ 函數預設參數和可變參數在 Lambda 表達式中的應用的詳細內容。更多資訊請關注PHP中文網其他相關文章!