ラムダ式での C++ 関数のデフォルト パラメーターと変数パラメーターの適用

王林
リリース: 2024-04-22 15:06:02
オリジナル
502 人が閲覧しました

ラムダ式では、デフォルト パラメータを使用するとデフォルトのパラメータ値を指定でき、変数パラメータを使用すると可変数のパラメータを渡すことができます。デフォルト パラメーターは必須パラメーターの後に続く必要がありますが、可変引数パラメーターは関数パラメーターの最後になければなりません。これらの機能により、コードが簡素化され、文字列のリストを操作するときに接頭辞や接尾辞が追加されるなど、読みやすさが向上します。

C++ 函数默认参数和可变参数在 Lambda 表达式中的应用

#C ラムダ式での関数のデフォルト パラメーターと変数パラメーターの適用

ラムダ式は匿名関数であり、関数は次のことを行うことができます。実行時に作成されます。デフォルトのパラメーターと可変引数パラメーターを使用して、ラムダ式の機能を強化できます。

デフォルト パラメータ

デフォルト パラメータを使用すると、ラムダ式のパラメータのデフォルト値を指定できます。呼び出し時にパラメータが指定されていない場合は、デフォルト値が使用されます。

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;
}
ログイン後にコピー

可変パラメータ

可変パラメータを使用すると、可変数のパラメータをラムダ式に渡すことができます。変数パラメーターは関数パラメーターの最後のパラメーターである必要があり、

... で表されます。

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++ 関数のデフォルト パラメーターと変数パラメーターの適用の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
c++
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート