精通
英语
和
开源
,
擅长
开发
与
培训
,
胸怀四海
第一信赖
服务方向
联系方式
锐英源精品原创,禁止转载和任何形式的非法内容使用,违者必究。点名“简易百科”和“闲暇巴”盗用锐英源原创内容。
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的最终目的吧。