网站首页 全球最实用的IT互联网站!

人工智能P2P分享Wind搜索发布信息网站地图标签大全

当前位置:诺佳网 > 软件工程 > 后端开发 > C++ >

C++lambda表达式简单笔记

时间:2025-10-18 21:37

人气:

作者:admin

标签:

导读:lambda表达式语法 #include lt;iostreamgt; int main(int argc, char* argv[]) { /** * 1. 基本形式与语法 */ //如果没有传入参数,参数列表可以省略 auto lambda1 = []() { std::cout lt;...

#include <iostream>

int main(int argc, char* argv[])
{
	/**
	* 1. 基本形式与语法
	*/

	//如果没有传入参数,参数列表可以省略
	auto lambda1 = []() { std::cout << "Hello, World !" << std::endl; };
	auto lambda2 = [](int x, int y) -> int //返回参数可使用尾置返回语法
		{
			if (x > y)
				return 1;
			else if (x < y)
				return -1;
			else
				return 0;
		};

	/**
	* 输出:
	* Hello, World !
	*/
	lambda1();
	/**
	* 输出:
	* -1
	*/
	std::cout << lambda2(1, 2) << std::endl;
	/**
	* 输出:
	* 1
	*/
	std::cout << lambda2(2, 1) << std::endl;
	/**
	* 输出:
	* 0
	*/
	std::cout << lambda2(1, 1) << std::endl;

	return 0;
}

捕获

#include <iostream>
#include <algorithm>
#include <vector>
#include <string>

int main(int argc, char* argv[])
{
	/**
	* lambda表达式捕获外部变量示例
	*/

	std::vector<int> vec{ 1,2,3,4,5,6,7,8,9,10 };
	std::string str;

	//&str为引用捕获,在函数内部可以被修改
	std::for_each(vec.begin(), vec.end(), [&str](int n) {
		str.append(std::to_string(n)).append(",");
		});
	str.pop_back();

	/**
	* 输出:
	* 1,2,3,4,5,6,7,8,9,10
	*/
	std::cout << str << std::endl;

	//argc为值捕获(拷贝),该变量在函数内部修改后不会影响外部变量
	std::for_each(argv, argv + argc, [argc](char* args) {
		/**
		* 输出命令行参数
		*/
		std::cout << args << std::endl;
	});

	/**
	* 关于其他捕获语法:
	* [=]: 所有外部变量的捕获均为值捕获(拷贝)
	* [&]: 所有外部变量的捕获均为引用捕获
	* [=, var...]: var以引用捕获,其他外部变量以值捕获
	* [&, var...]: var以值捕获,其他外部变量以引用捕获
	*/

	return 0;
}

当lambda表达式不使用[]捕获时,其表现与函数指针相同;如果使用了[]捕获,则会变成带有成员变量(引用或拷贝)和重载operator()函数运算符的类,所以将lambda表达式代入参数为函数指针的函数时,不能使用[]捕获。

本文来自博客园,作者:Reimual,转载请注明原文链接:https://www.cnblogs.com/Reimual/p/19150187

温馨提示:以上内容整理于网络,仅供参考,如果对您有帮助,留下您的阅读感言吧!
相关阅读
本类排行
相关标签
本类推荐

CPU | 内存 | 硬盘 | 显卡 | 显示器 | 主板 | 电源 | 键鼠 | 网站地图

Copyright © 2025-2035 诺佳网 版权所有 备案号:赣ICP备2025066733号
本站资料均来源互联网收集整理,作品版权归作者所有,如果侵犯了您的版权,请跟我们联系。

关注微信