编辑
2024-02-29
code
00
请注意,本文编写于 203 天前,最后修改于 203 天前,其中某些信息可能已经过时。

众所周知,Lambda表达式是利用重载operator()实现的语法糖。 同时,Lambda表达式在不捕获变量时能够直接赋值给函数指针,很多同学可能没思考过原因。

cpp
int main() { using void_func_t = void (*)(); void_func_t f {}; f = [](){}; return 0; }

使用cpp insights看一下。(见此链接)

cpp
int main() { using void_func_t = void (*)(); using FuncPtr_3 = void_func_t; FuncPtr_3 f = {}; class __lambda_4_7 { public: inline /*constexpr */ void operator()() const { } using retType_4_7 = void (*)(); inline constexpr operator retType_4_7 () const noexcept { return __invoke; } private: static inline /*constexpr */ void __invoke() { __lambda_4_7{}.operator()(); } }; f = __lambda_4_7{}.operator __lambda_4_7::retType_4_7(); return 0; }

相比于有捕获的Lambda表达式,辅助类多了两个函数,类型重载operator retType_4_7和静态函数__invoke,答案就显而易见了。

本文作者:OhtoAi

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!