C++ 中文周刊 第48期

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

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

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

春节快乐各位,年前最后一更,下周也不更,安心过年吧


资讯

标准委员会动态/ide/编译器信息放在这里

编译器信息最新动态推荐关注hellogcc公众号 本周更新OSDT Weekly 2022-01-26 第134期

文章

int main() {
  auto opt = std::optional{42};
  opt.and_then([](auto o)->std::optional<int>{ std::cout << o;; return std::nullopt; });// prints 42
}

没啥说的,以前说过,早就该加了

#include <typeinfo>
#include <type_traits>

static_assert(std::is_same_v<int, int>);
static_assert(typeid(int) == typeid(int));

static_assert(typeid(int) == typeid(const int));
static_assert(not std::is_same_v<int, const int>);

static_assert(typeid(int) == typeid(const int&));
static_assert(not std::is_same_v<int, const int&>);

这东西总算不是运行时了。不然真没人用

出于值语意以及编译器优化角度考虑,不建议const成员,不方便move/swap,但是如果你是单例就忽略

struct Employee {
    std::string name_;  // an employee's name may change...
    const std::string id_;  // ...but never their unique ID
};

Employee e1 = {"Alice", "12345"};
Employee e2 = {"Bob", "24601"};
e1 = e2; // oops
std::swap(e1, e2); // oops

返回值也不建议const, 拿了不能改,图啥呢

struct Widget {
    std::string name_;
    const std::string name() const { return name_; }
};

局部不变量,用constexpr

constexpr size_t chunkStart = sizeof(BlockHeader) + sizeof(ChunkHeader);

局部返回值,不const,可能会阻止优化

std::string g(bool early) {
    if (early)
        return "";
    const std::string result = "hello";
    return result; // oops
}

其他场景,比如const引用传参数(大对象)该用用,没问题

介绍constexpr的演化

能用std::span就用,std::span做接口可以兼容std::array 内置c数组,std::vector,且前两个,最终效果一致,大大的隐藏了内置数组的坑爹效应

一百行代码让你看懂VM,代码在这里

linux的一个patch ,TCP有性能提升

std::for_each(std::execution::par, input.cbegin(), input.cend(),
                doStuff);

没啥说的,c++17的东西

视频

讨论省分支的技巧,其实主要是省cpu,利用cpu的pipeline,所以循环可以展开,分支可以尽量省掉

用冒号表达式,用bool 做index的jump table

term[2] = {expr1, epxr2};
sum += term[bool(cond)];

likely也可以用

其实更多是演示,值得看一看

作者写了本新书The Art of Writing Efficient Program,有机会可以读读

教你用协程来把单个操作聚合成pipeline,更高效

没有PPT啊,这个视频讲了很多实用的concept设计

代码https://github.com/GabrielDosReis/ipr, https://github.com/microsoft/ifc-spec TODO没看懂干嘛的

看开源项目的文档,学学人家怎么写代码文档的

讲设计模式的,这名字,典型德国人

手把手教你写static_vector

写单测,要写就写最难的

手把手教你学汇编,值得一看

手把手教你用c++描述sql

开源项目需要人手

新项目介绍/版本更新

工作招聘


本文永久链接

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