前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >C++ 动态新闻推送 第21期

C++ 动态新闻推送 第21期

作者头像
王很水
发布2021-08-31 17:32:03
发布2021-08-31 17:32:03
37400
代码可运行
举报
运行总次数:0
代码可运行

C++ 动态新闻推送 第21期

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

每周更新

周刊项目地址 github,在线地址

discord讨论群组 |飞书讨论群组|知乎专栏

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


资讯

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

本周周报github直达

大概是程序验证的东西,看不懂

Bjarne Stroustrup在PLDI上发表了重要讲话,总结了c++近年来的飞速发展

这有个pdf

文章

需要了解simd sse 汇编

Daniel Lemire 新活, 场景是合并两个排好序的数组,伪代码这样

代码语言:javascript
代码运行次数:0
复制
    v1 = first value in input 1
    v2 = first value in input 2
    while(....) {
        if(v1 < v2) {
            output v1
            advance v1
        } else if (v1 > v2) {
            output v2
            advance v2
        } else {
           output v1 == v2
           advance v1 and v2
        }
    }

如何减少分支?用?:

代码语言:javascript
代码运行次数:0
复制
while ((pos1 < size1) & (pos2 < size2)) {
    v1 = input1[pos1];
    v2 = input2[pos2];
    output_buffer[pos++] = (v1 <= v2) ? v1 : v2;
    pos1 = (v1 <= v2) ? pos1 + 1 : pos1;
    pos2 = (v1 >= v2) ? pos2 + 1 : pos2;
 }

看生成的汇编,效果很好很多move godbolt

他的测试代码在这里https://github.com/lemire/Code-used-on-Daniel-Lemire-s-blog/blob/master/2021/07/14/union2by2.cpp

简单压测的数据

system

conventional union

‘branchless’ union

Apple M1, LLVM 12

2.5

2.0

AMD Zen 2, GCC 10

3.4

3.7

AMD Zen 2, LLVM 11

3.4

3.0

但是我用quickbench的到的数据,gcc场景不快,clang场景快了一点

https://quick-bench.com/q/tNdjEe-55p6zPjDGF-jBIgDYJAQ

来看看第二季度c++提案有什么好看的

Making std::unique_ptr constexprP2273R1

让unique_ptr更灵活,不必要的RAII去掉,比如这种

代码语言:javascript
代码运行次数:0
复制
constexpr auto fun() {
    auto p = std::make_unique <int>(4);
    return *p;
}

constexpr auto i = fun();
static_assert(4 == i);

Support for UTF-8 as a portable source file encodingP2295R3 统一一下utf编码

Stacktrace from exception P2370R0 抛异常会丢堆栈信息,这也是很多人不愿意用std::thread的原因,旧版本有问题,会丢堆栈,这里加个补丁

std::expected P0323R10 终于有了,这个就是rocksdb那种status类的泛式封装,像这样

代码语言:javascript
代码运行次数:0
复制
std::expected<Object, error_code> PrepareData(inputs...);

**Mark all library static cast wrappers as [nodiscard] ** P2351R0 还是补丁,static_cast右值会告警,但是std::move不会,但std::move是static_cast简单包了一层,所以把static_cast也标记上

代码语言:javascript
代码运行次数:0
复制
val; 
static_cast<T &&>(val); // gives warning
std::move(val);         // no warning!

还有这些也建议加上[nodiscard]

代码语言:javascript
代码运行次数:0
复制
struct foo {
  foo() { throw 0; }
};

struct bar {
  bar() try : foo_{} {
    // constructor body
  }
  catch (...)
  {
    // exceptions from the initializer list are caught here
    // but also re-thrown after this block (unless the program is aborted)
  }

private:
  foo foo_;
};

int main() try {
  bar b{};
}
catch(...) {
  // okay, exception cought here!
}

可能有人不知道cd命令实际上是bash内建(builtin)的命令,这里带你了解bash builtin函数的面纱以及手把手教你写一个builtin函数

完整代码在这里 https://github.com/lollipopman/bash-ini-builtin-blog-post

在嵌入式平台,比如stm32之类的小芯片上跑c++的代码。大概意思是实现了一个库,把c++代码翻译成c

旋转字符串的几种写法

视频

代码简单走读O3DE,一个游戏引擎 https://github.com/o3de/o3de 简单总结-读起来有点费劲

这人想要变参friend,苦于不懂编译器,到cppnow来找人帮忙来了,老哥很幽默

项目


看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持!

本文永久链接

代码语言:txt
复制
     This site is open source. [Improve this page](https://github.com/wanghenshui/cppweeklynews/edit/dev/posts/021.md).
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • C++ 动态新闻推送 第21期
    • 资讯
      • 编译器信息最新动态推荐关注hellogcc公众号
    • 文章
    • 视频
    • 项目
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档