锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 技术中心 / C++开源社区 / C++语法开源 / C++17 Constexpr Lambdas常量Lambdas表达式理解和用途

服务方向

人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
量化预测
股票离线分析软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发

联系方式

固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品原创,禁止转载和任何形式的非法内容使用,违者必究。点名“简易百科”和“闲暇巴”盗用锐英源原创内容。


C++17 Constexpr Lambdas常量Lambdas表达式理解和用途


C++17 Constexpr Lambdas常量Lambdas表达式理解,constexpr里expr是表达式的意思,指示Lambdas表达式是常量的,不会修改参数变量值,这会降低编译结果exe文件大小,优化性能,这就像inline类似的机制,能优化一点点。

如果Lambdas表达式里本身就没修改参数变量,暗示是constexpr效果,编译器也可以分析出来,但是就是编译器会慢一点而已。

C++17 Constexpr Lambdas常量Lambdas表达式用途主要针对算式或参数变量数据变换场合,在复杂的场合里使用不上。下面是几个示例:

constexpr auto SumLambda    = [](const auto &a, const auto &b) 
                                    { return a + b; };            // implicitly constexpr
	constexpr auto NvalueLambda = [](int n) { return n; };        // implicitly constexpr
	constexpr auto Pow2Lambda   = [](int n) { return n * n; };    // implicitly constexpr
	
	auto Add32Lambda = [](int n)
	{
		return 32 + n;
	};

	auto GetStr = [](std::string s)                                                  
	{
		return "Hello" + s;
	};

	constexpr std::string(*funcPtr)(std::string) = GetStr;

C++17 Constexpr Lambdas常量Lambdas表达式语法形式如下:

[capture clause] (parameter list) mutable costexpr exception-specification -> return-type
{

}

虽然语法形式里costexpr是在参数列表后面,实际上放=号左边的变量前面进行修饰更容易理解。

如果指定了constexpr,但是lambdas表达式{}块内代码修改了参数变量的值,编译器会有编译错误,停止编译。

lambdas表达式里类似函数,函数嵌套的形式对初学者和编译器来说,都是小麻烦,所以带上些属性,让初学者慎重,让编译器更容易理解,这可能是constexpr的最终目的吧。

友情链接
版权所有 Copyright(c)2004-2024 锐英源软件
统一社会信用代码:91410105098562502G 豫ICP备08007559号 最佳分辨率 1440*900
地址:郑州市金水区文化路97号郑州大学北区院内南门附近