C++ 中文周刊 第64期

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

周刊项目地址在线地址知乎专栏 腾讯云+社区

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

更新于5月27日晚九点


资讯

标准委员会五月邮件

编译器信息最新动态推荐关注hellogcc公众号 2022-05-25 第151期

文章

#include <string>

constexpr auto foo() {
  return std::string{"bar"};
}

static_assert("bar" == foo());

没啥说的

介绍gcc profiler原理。很长

语言律师Arthur O’Dwyer的提案以及实现,看个乐

介绍封装c标准库文件c++做了啥额外的工作,一些额外的名字mangle,不同的分支调用,noexcept之类的

如果是你,你怎么实现optional的复制呢?

比较简单的想法是析构再构造

template <typename T>
auto Optional<T>::operator=(Optional<T> const& rhs) -> Optional<T>& {
    if (has_value_ and rhs.has_value_) {
        value_ = rhs.value_;
    } else if (has_value_ and not rhs.has_value_) {
        value_.~T();
        has_value_ = false;
    } else if (not has_value_ and rhs.has_value_) {
        ::new (&value_) T(rhs.value_);
        has_value_ = true;
    } else {
        // nothing
    }
    return *this;
}

但如果是简单类型,这未免太杀鸡牛刀

如果是Optional<T&>,这可能又不正确。作者仔细的讨论了一番。这里不展开了。复杂

分支和条件移除优化(比如:?表达式)哪个更好?很难说,不一定没有分支更好。但相对好一些

因为:?表达式编译器可能给你加私货,插入if,甚至生成jump,感觉更复杂了

就算你是一行代码,编译器还是可能给你加东西的

unsigned r = ((a & 0xffff0000) != 0) << 4;


unsigned r;
if (a > 65535)
  r = 16;
else
  r = 0;

__builtin_expect 对编译器来说帮助不大,用这个是优化pipeline的,要知道你的业务场景

Gcc 9加了个__builtin_expect_with_probability__builtin_expect更准点

没啥说的

simdjson支持avx512更快了

这人Johny’s Software Lab LLC博客挺不错。原来是个咨询公司啊 这怎么能赚到钱的。

我对国外很多软件的咨询赚钱模式感到不可思议。国内根本没有这个环境。归根到底是国内人才太多了?

说回正题

这篇文章讲了一些性能优化点,比如用定制内存分配器让数据局部性更好,以及各种省数据集的操作

说过很多次,cache应用/proxy应用,定制的内存分配器,非常有用,非常降低延迟,比如这个https://github.com/moya-lang/Allocator/blob/master/Allocator.h 别看实现挫,非常够用

还介绍了一些工具,比如https://github.com/andikleen/pmu-tools

看不懂了。

怎么判定一个数组已经排好序了。正常来说遍历一边就行了。不过c++有个is_sorted接口,

另外用 adjacent_find也是可以的

作者写了个c版的工具,输出代码目录的各种数据(行数,大小等等)这个博客是心路历程,代码在这里https://github.com/skeeto/scratch/blob/master/misc/watc.c

作者写VS Code js插件的,查bug查到编译器头上了。这个是心路历程。

手把手教你用锁

视频

没啥说的。vector<bool>没人用。

开源项目需要人手

新项目介绍/版本更新

工作招聘

有没有可以居家办公的工作啊,我想居家吉林农村办公


本文永久链接

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