办公问答网

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 57|回复: 0

C++ 中文周刊 第96期

[复制链接]

1

主题

3

帖子

5

积分

新手上路

Rank: 1

积分
5
发表于 2023-1-17 14:24:21 | 显示全部楼层 |阅读模式
周刊项目地址
RSS https://github.com/wanghenshui/cppweeklynews/releases.atom
弄了个qq频道,手机qq点击进入
欢迎投稿,推荐或自荐文章/软件/资源等
请提交 issue
0113
部门聚餐了延误了一下。本周没看视频
<hr/>资讯

标准委员会动态/ide/编译器信息放在这里
编译器信息最新动态推荐关注hellogcc公众号 本周更新  2023-01-11 第184期
一个博客收集网站 https://swedencpp.se/blogs 英文c++的最新博客收集
文章


  • 游戏开发中,程序如何计算巨大的伤害数字,如超过long int范围的数字?
取对数

  • 静态链接和静态库实践指北
哎。倒腾cmake我头疼

  • Google公布大杀器TCP Protective Load Balancing,支持linux 6.2,均衡负载新革命
有点意思。这种针对牛逼网卡的优化我感觉大厂都在做类似的玩意

  • Supporting the Use of Rust in the Chromium Project
又一个c++项目引入rust的。之前有火狐浏览器,clickhouse, redpanda,linux内核,唱衰一波,不过不要慌,c++程序员一时半会不会失业

  • c++ tip of week Did you know that C++20 added support for Unevaluated asm-declaration in constexpr functions?
看代码
constexpr auto get = [](auto value) {
  if consteval {
    return value;
  } else {
    auto result = 0;
    asm("movl $42, %%eax\n" : "=r" (result) );
    return result;
  }
};

static_assert(0 == get(0));
static_assert(4 == get(4));
static_assert(2 == get(2));

consteval auto fn() {
    return get(0);
}

int main(int argc, char**) {
  assert(42 == get(0));
  assert(42 == get(argc));
  return fn();
}

  • C++20/clang-15 static reflection via __builtin_dump_struct


希望大家身体健康,活得久一点,就能用到静态反射了

  • On leading underscores and names reserved by the C and C++ languages
编译器标准库用到很多变量是两个下划线 下划线大写字母开头的。自己定义变量尽量别用

  • Transcoding Unicode with AVX-512: AMD Zen 4 vs. Intel Ice Lake
测了一下simdutdf在Zen4的表现,挺强的

  • 2022 APFS Advent Challenge Day 17 - Blazingly Fast Checksums with SIMD
blake3是不是就是simd加速的?

  • Pictures of a Working Garbage Collector
给oilshell设计的GC。没仔细看

  • Care is needed to use C++ std::optional with non-trivial objects
optional做函数参数是十分不恰当的。这玩意只适合做返回值

  • On QVarLengthArray and Uninitialized Storage in C++
QVarLengthArray类似vector,区别在于对小数据做SBO优化,且resize不会做额外的初始化动作。初始化动作是c++默认有的。很多场景来看是多余的,比如string。c++20/23做了许多修正
比如
std::unique_ptr<int[]> p3 = std::make_unique_for_overwrite<int[]>(100'000);
再比如string
// C++23
std::string s = ~~~;

auto oldSize = s.size();

s.resize_and_overwrite(100'000, [oldSize](char *buf, std::size_t count) {

  // For starters, s will *reserve* enough space, without initializing it.
  //
  // - buf points to the string's storage (i.e. s.data()) *after* the reserve;
  // - count is the 1st argument to resize_and_overwrite (100k), so
  //   we can re-use this function with different `count`s.


  // Populate the range [buf, buf+count]. We can mutate the entirety of
  // the string's buffer. But let's say we're just interested in populating
  // the new contents -- from position oldSize up to count.
  for (size_it i = oldSize; i < count; ++i)
    buf = generateData(i);

  // Notes:
  // - If we're growing, the newly created storage is *uninitialized*.
  //   Don't read from it!
  //
  // - The old contents are still there, and we can access them freely.
  //   If needed, carry `oldSize` manually, to identify where to start
  //   writing (and leave the old contents alone).
  //
  // - It is legal to write into buf[count],
  //   but it will be overwritten with \0 when we're done.
     
  // We don't need to populate the *entire* buffer -- we may stop short!
  // The returned value will be the new size of the string.

  return actual_new_size;
});
QVarLengthArray不会做多余的初始化,请注意(不过QT这套东西会玩的越来越少了,大部分读者应该不玩QT)

  • What's an executable and how is it structured
基础知识,不会的可以去看《程序员的自我修养 链接/库》这本书

  • What does it mean when I get a mismatch from MSVC for _COROUTINE_ABI?
MSVC有两套coroutine API
// in <experimental/coroutine>
#ifndef _ALLOW_COROUTINE_ABI_MISMATCH
#pragma detect_mismatch("_COROUTINE_ABI", "1")
#endif // _ALLOW_COROUTINE_ABI_MISMATCH

// in <coroutine>
#ifndef _ALLOW_COROUTINE_ABI_MISMATCH
#pragma detect_mismatch("_COROUTINE_ABI", "2")
#endif // _ALLOW_COROUTINE_ABI_MISMATCH
使用 /std:c++20和 /std:c++latest,才会用最新的api,experimental是c++17旧的

  • How should I interpret the various values of NLM_CONNECTIVITY?
又是Windows API,如何处理flags,我直接贴下面,不懂windows
FlagMeaningRecommendation
DISCONNECTEDNo network interface detects any networkTreat as offline.
NOTRAFFICAn interface is connected, but it cannot send or receive network traffic.Treat as offline.
SUBNET/LOCALNETWORKAn interface has been configured to send traffic, but the system cannot confirm Internet connectivity.Make one attempt to contact service.
INTERNETThe system has confirmed access                        to Microsoft Internet sites.Treat as fully online.


  • It rather involved being on the other side of this airtight hatchway: Administrator attacking a domain account on the local system
没看懂
视频


  • C++ Weekly - Ep 358 - C23's #embed and C++23's #warning
没啥说的,之前讲过,#embed可以嵌入二进制,比如插个音乐,文本等等
开源项目需要人手


  • asteria 一个脚本语言,可嵌入,长期找人,希望胖友们帮帮忙,也可以加群384042845和作者对线
  • pika 一个nosql 存储, redis over rocksdb,非常需要人贡献代码胖友们, 感兴趣的欢迎加群294254078前来对线
新项目介绍/版本更新


  • vtkImplicitArrays: A new VTK framework for manipulating array-like data
没看懂这玩意是干什么的
<hr/>看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢!  你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持!
本文永久链接
如果有疑问评论最好在上面链接到评论区里评论,这样方便搜索,微信公众号有点封闭/知乎吞评论
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|办公问答网

GMT+8, 2025-4-3 05:18 , Processed in 0.094233 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc. Templated By 【未来科技 www.veikei.com】设计

快速回复 返回顶部 返回列表