从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态。
每周更新
欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue
由于指令重排而导致的多线程问题主要是两个,数据依赖与控制依赖,数据依赖就是可见性
控制依赖类似这段代码
int x = a
if x > 10
y = b
else
z = b
引入volatile_if来解决,非常暴力
#define barier_true() ({ barrier(); 1; })
#define volatile_if(x) if ((x) && barrier_true())
#define barrier() __asm__ __volatile__("": : :"memory")
注意using的用法
template<class... TEvents>
struct ihandler : ihandler<TEvents>... {
virtual ~ihandler() noexcept = default;
using ihandler<TEvents>::on...;
};
template<class TEvent> struct ihandler<TEvent> {
virtual ~ihandler() noexcept = default;
virtual auto on(const TEvent&) -> bool = 0;
};
int main() {
struct foo {};
struct bar {};
struct handler : ihandler<foo, bar> {
auto on(const foo&) -> bool override { return true; }
auto on(const bar&) -> bool override { return false; }
};
std::unique_ptr<ihandler<foo, bar>> h = std::make_unique<handler>();
assert(h->on(foo{}));
assert(not h->on(bar{}));
}
介绍inplace_merge 归并算法
最近苹果IOS系统出现一个bug,如果把wifi名字改成%p%s%s%s%s%n,苹果手机连上就会出现wifi挂掉永远连不上。这种字符串初始化是比较原始的设计里。在c++现在的代码,如何避免这种问题呢? fmt库以及std::format
介绍了使用range反转字符串的几种写法:
使用恰当的值类型,避免转换造成的效率低下,另外编译器警告都开开, 用 -Wsign-conversion,别用-Wconversion
For signed <-> unsigned conversion gcc has a -Wsign-conversion flag. For some reason -Wconversion is not working there. According to gcc docs: “Warnings about conversions between signed and unsigned integers are disabled by default in C++ unless -Wsign-conversion is explicitly enabled.”
我觉得就不如直接看ppt
简单概括这些视频内容
std::find_if std::remove_if传进去 的lambda不能有状态,必须是regular的,还讲了一大堆其他的东西,大概意思是注意把函数写对之类的
介绍静态分析的原理 类型系统等等
介绍windows错误分析的,这个我不懂,就没看
介绍wasm的,没有细看