卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章76568本站已运行4323

C++ 匿名函数和函数对象的语法异同

c++++ 匿名函数和函数对象的语法差异:名称:匿名函数没有名称,而函数对象具有名称。运算符重载:函数对象可以重载运算符,而匿名函数不能。传递方式:匿名函数只能通过引用传递,而函数对象可以通过值或引用传递。定义位置:匿名函数可以在任何地方定义,而函数对象必须在类的定义中定义。

C++ 匿名函数和函数对象的语法异同

C++ 匿名函数和函数对象的语法异同

匿名函数

  • 定义:没有名称的函数,通常用于传递给其他函数或对象。
  • 语法:[&]() { ... } 或 [](int a, int b) { return a + b; }

函数对象

立即学习“C++免费学习笔记(深入)”;

  • 定义:一个具有运算符重载的类,它可以像函数一样调用。
  • 语法:
struct Add {
    int operator()(int a, int b) { return a + b; }
};

语法异同

特征匿名函数函数对象
名称没有
运算符重载不能可以
传值只能通过引用传值可以通过值或引用传值
定义位置可以在任何地方定义必须在类的定义中定义

实战案例

// 匿名函数
std::vector<int> numbers = {1, 2, 3, 4, 5};
int sum = std::accumulate(numbers.begin(), numbers.end(), 0, [](int a, int b) { return a + b; });

// 函数对象
struct Add {
    int operator()(int a, int b) { return a + b; }
};
int sum2 = std::accumulate(numbers.begin(), numbers.end(), 0, Add());
卓越飞翔博客
上一篇: C++ 不同操作系统下函数调用约定的实现
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏