Tags

4 个页面

lambda

unordered_map 查得到却取错值,一次静态 lambda 的内存事故

有一种 C++ 问题特别容易把人带偏:unordered_map::find 明明命中了,it->first 也对,可你再看 it->second 里面的字段,像是变成了另一个 key 的数据。

第一反应通常是怀疑 map 坏了,或者 hash 冲突把数据弄乱了。可 unordered_map 没那么玄。查找命中以后,key 和 value 对不上,更常见的原因不是容器失灵,而是你在更新 value 的时候已经写错了地方。

这篇记录的坑,就是函数内部的 static lambda 捕获了局部引用。第一轮看不出来,后面再调用时,lambda 还握着第一次调用留下的引用,问题就开始变得像“缓存串号”。

C++中lambd表达式参数生命周期

在C++中,lambda表达式是一种方便的匿名函数,可以捕获外部变量并在其体内使用。这使得lambda成为一种灵活的编程工具。不过,lambda表达式的参数生命周期是一个需要特别关注的方面,尤其是在捕获和传递参数时

编译器、回调函数、性能测试

去年设计了一个SDK,负责处理封装一些事件,对外提供一个类接口,服务初始化的时候,调用方实现对应的类,并将对象指针传给模块。 接触过C11,好奇心害死猫,就想着这些接口都用lambda函数对象回调来实现会是什么结果,和纯虚函数的接口定义方法比较,更加灵活。 疑问就出现了,两种不同的语法,从性能角度来说,哪个更快一些?不懂编译原理,弄段代码试试看。