编辑
2024-03-01
code
00

lambda对于有捕获和无捕获的展开有比较大的区别,无捕获的情况下会多两个函数,可以分别看下面代码的FooBar

Link: https://cppinsights.io/s/8c06a095

编辑
2024-03-01
code
00

类型列表

cpp
template <typename T, typename U, typename ...Args> struct get_type_index { constexpr static size_t value = 1u + get_type_index<T, Args...>::value; }; template <typename T, typename ...Args> struct get_type_index <T, T, Args...> { constexpr static size_t value = 0u; }; template <size_t index, typename T, typename ...Args> struct get_index_type { using type = typename get_index_type<index - 1, Args...>::type; }; template <typename T, typename ...Args> struct get_index_type<0u, T, Args...> { using type = T; };

image.png

编辑
2024-02-29
code
00

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

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

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

编辑
2024-02-29
tools
00
编辑
2024-02-27
tools
00

Website: Effective Modern C++

简介

如果你是一位经验丰富的 C++ 程序员并且多少跟我差不多,那你在初次接触 C++11 的时候就会想,“是的,是的,我知道的。它还是 C++,就是多了点东西。”但随着你了解越多,你会为改变的幅度之巨感到震惊。auto 声明,基于 range 的 for 循环,lambda 表达式,还有右值引用完全改变了 C++ 的面貌,这还不说新的并发特性。然后还有一些惯常的改进。0 和 typedef 出局,nullptr 和别名声明新晋。枚举现在应该是限域的了。相比内置的指针类型,现在要更倾向去使用智能指针。移动对象通常也好过于拷贝它们。