Skip to content

Latest commit

 

History

History
188 lines (135 loc) · 4.56 KB

076.md

File metadata and controls

188 lines (135 loc) · 4.56 KB
layout title
post
第76期

C++ 中文周刊 第76期

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

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

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

可以贴在下一期草稿里 链接

2022 08 19


资讯

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

编译器信息最新动态推荐关注hellogcc公众号 本周更新 2022-08-17 第163期

文章

类似folly::Poly

代码在https://github.com/microsoft/proxy

std::expected<std::vector<int>, Status> ReadData()
{
   if (!HasAcccess())
      return std::unexpected<Status> { Status::AccessDenied };
   if (OpenConnection() != 0)
      return std::unexpected<Status> {Status::DataSourceError};
   if (Fetch() != 0)
      return std::unexpected<Status> {Status::DataError};
   std::vector<int> data;
   data.push_back(42);
   return data;
}

相当于 StatusWith<T>这种组件

void report_error();
[[gnu::cold]] void report_error_cold();
void logic();

/*
cold(bool):
        test    edi, edi
        jne     .LBB0_1
        jmp     logic()
.LBB0_1:
        jmp     report_error_cold()
*/
auto cold(bool error) {
    if (error) {
        report_error_cold();
        return;
    }

    logic();
}

/*
normal(bool):
        test    edi, edi
        je      .LBB1_2
        jmp     report_error()
.LBB1_2:
        jmp     logic()
*/
auto normal(bool error) {
    if (error) {
        report_error();
        return;
    }

    logic();
}

/*
unlikely(bool):
        test    edi, edi
        jne     .LBB2_1
        jmp     logic()
.LBB2_1:
        jmp     report_error()
*/
auto unlikely(bool error) {
    if (error) [[unlikely]] {
        report_error();
        return;
    }

    logic();
}

对代码优化有点帮助。之前也介绍过

对比了一下各种atomic 锁之类的差异

看个乐

这个优化了解一下

视频

// #embed 支持
//#embed </path/to/file.txt>

//constexpr 部分支持
// not allowed in c23 :(
//constexpr int get_value() {
//  return 42;
//}
// allowed in c23!
constexpr int universe_and_everything = 42;

// [[attributes]]支持
[[nodiscard]] int get_value();
// deprecated, fallthrough, maybe_unused, nodiscard, noreturn

// 未命名参数
int do_work(int x, int)
{
  return x * 23;
}

// 类型枚举
enum MyEnum : char {
  x,
  y
};

// #6 __has_include
#if __has_include("somefile")
#include("somefile");
#endif

开源项目需要人手

  • asteria 一个脚本语言,可嵌入,长期找人,希望胖友们帮帮忙,也可以加群753302367和作者对线

新项目介绍/版本更新

  • bloaty 查看代码的膨胀程度
  • passgen 根据指定正则生成密码
  • async_simple 协程库,阿里的,有demo。不过是部分开源
  • natalie c++写的ruby
  • jank c++写的Clojure

工作招聘

解不出bug要被开了


本文永久链接