C++ 中文周刊 第18期

reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态。

每周更新

周刊项目地址 github在线地址知乎专栏

欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue


资讯

编译器信息最新动态推荐关注hellogcc公众号

本周周报github直达

文章

由于指令重排而导致的多线程问题主要是两个,数据依赖与控制依赖,数据依赖就是可见性

控制依赖类似这段代码

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的,没有细看

项目


本文永久链接

看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持! 觉得写的不错那就给点吧, 在线乞讨 微信转账