前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >C++ 中文周刊 第143期

C++ 中文周刊 第143期

作者头像
王很水
发布于 2024-07-30 06:47:37
发布于 2024-07-30 06:47:37
9200
代码可运行
举报
运行总次数:0
代码可运行

RSS https://github.com/wanghenshui/cppweeklynews/releases.atom

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

请后台留言

另外公众号挂了c++templates 第二版优惠

从上面的链接里下单的兄弟买书到货后可以找我退佣金,加我微信,公众号后台回复即可

本期文章由 黄亮anthony 不语 赞助

资讯

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

编译器信息最新动态推荐关注hellogcc公众号 本周更新 2023-12-20 第233期

委员会邮件 https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2023/#mailing2023-12

本月委员会邮件没有什么新鲜的,顶多fiber_context。这里不展开了

文章

Did you know that C++26 added Pack Indexing? https://github.com/tip-of-the-week/cpp
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
template<auto N> consteval auto nth(auto... ts) { return ts...[N]; }
static_assert(1 == nth<0>(1, 2, 3));
static_assert(2 == nth<1>(1, 2, 3));
static_assert(3 == nth<2>(1, 2, 3));

还不确定有什么作用

The double life of objects https://akrzemi1.wordpress.com/2023/12/18/the-double-life-of-objets/

const的副作用

经典例子

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
int main() {
  const int i = 9;
  int& j = const_cast<int&>(i);
  j = 4;
  std::cout << i << std::endl; // prints 9
  std::cout << j << std::endl; // prints 4
}

https://godbolt.org/z/vGG3cdavE

但是这个例子,返回优化了,即使没有实现move

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <iostream>
#include <cassert>

class Rng {
    int _min;
    int _max;
    // invariant: _min <= _max

public:
    Rng(int lo, int hi) 
    // precond: lo <= hi
    : _min(lo), _max(hi)
    { assert(_min <= _max); }

    int const& min() const { return _min; }
    int const& max() const { return _max; }

    void set(int lo, int hi)
    // precond: lo <= hi
    {
        _min = lo;
        _max = hi;
        assert(_min <= _max); 
    }

    Rng(Rng&&) { assert(false); } // this is never called
    Rng(Rng const&) { assert(false); } // this is never called
};

const Rng foo() {
  const Rng r {1, 2};
  std::cout << &r << std::endl;
  return r;
}

Rng bar() {
    Rng r = foo();
    r.set(3, 4);
    std::cout << &r << std::endl;
    return r;
}

int main() {
    const Rng z = bar();
    std::cout << &z << std::endl;
}

https://godbolt.org/z/n9nn5GjMM

注意这两个例子的区别,统一作用域上的修改

上面的这个xyz 本质上就是一个对象,和第一个例子同一个域里const_cast导致变化不同

About time - how to unit test code that depends on time https://playfulprogramming.blogspot.com/2023/12/about-time.html

怎么mock时间?比如特化?

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
template <typename ...>
constexpr auto clock_impl = std::chrono::some_clock{};

template <typename ... Ts>
struct app_clock {
    static
    std::chrono::some_clock::time_point now()
    {
        return clock_impl<Ts...>.now();
    }
};
struct test_clock {
    using time_point = std::chrono::some_clock::time_point;
    static time_point now() { return {};}
};

template <>
constexpr auto clock_impl<> = test_clock{};

https://godbolt.org/z/GbWYaGc7q

浮点数误差入门 https://zhuanlan.zhihu.com/p/673320830?utm_psn=1721654566368694272

讲的不错

linux kernel list 为什么用WRITE_ONCE?https://www.zhihu.com/question/404513670/answer/3323448915?utm_psn=1721654125845192704

写的很有深度,值得一看

从一个crash问题展开,探索gcc编译优化细节 https://zhuanlan.zhihu.com/p/673049367?utm_psn=1721643480974217216

省流 arm O3 优化bug

Trivial Auto Var Init Experiments https://serge-sans-paille.github.io/pythran-stories/trivial-auto-var-init-experiments.html

-ftrivial-auto-var-init=[pattern|zero|uninitialized]

帮助自动初始化栈上的局部变量

开销很大,研究了一圈放弃了

Two kinds of function template parameters https://quuxplusone.github.io/blog/2023/12/17/function-template-parameters/

一种是make_unique这种需要指定T的,一种是swap sort这种不指定T的

如何跨过这种边界,有设计,比如CTAD,但这并不建议使用

那就只能多提供重载了,比如optional

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
template<class T, class A>
optional<T> make_optional(A);
template<class A>
optional<A> make_optional(A);

然后她举了个例子,怎么设计强制制定T和忽略T

https://godbolt.org/z/h38PhG3Y6

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#include <type_traits>
#include <iostream>

//template<class T, class A>
//T implicitly_convert_to(std::type_identity_t<A>) = delete;

template<class T, class A,
         std::enable_if_t<std::is_convertible_v<A, T>, int> E = 0>
T implicitly_convert_to(A arg) { return T(arg); }

int main() {
  //auto i0 = implicitly_convert_to(9.9999999);
  //std::cout << i0 << "\n";
  auto i1 = implicitly_convert_to<int>(9.9999999);
  std::cout << i1 << "\n";

  //auto j2 = implicitly_convert_to<int, float>(9.9999999);
  //std::cout << j2 <<"\n";
  return 0;
}

看一乐

A Coroutines-Based Single Consumer – Single Producer Workflow by Ljubic Damir https://www.modernescpp.com/index.php/a-coroutines-based-single-consumer-single-producer-workflow-by-ljubic-damir/

直接贴代码了

https://godbolt.org/z/MvYfbEP8r

https://godbolt.org/z/57zsK9rEn

设计的挺有意思的,鉴于篇幅,放在后面

手动优化C++代码来加快编译速度?! https://zhuanlan.zhihu.com/p/673852429

constexpr的代码 编译器没有做充分的优化。这可能加剧编译时长

算是个坑爹细节。运行时能充分优化的代码到了constexpr期反而没优化了

Raymond windows环节,看不懂
  • • How do I specify an optional string parameter to a Windows Runtime method? https://devblogs.microsoft.com/oldnewthing/20231215-00/?p=109155
  • • If the RegisterClass function takes ownership of the custom background brush, why is it leaking? https://devblogs.microsoft.com/oldnewthing/20231218-00/?p=109163
  • • How do I get access to the wParam and lParam of the WM_QUERY­END­SESSION method from my MFC message handler? https://devblogs.microsoft.com/oldnewthing/20231221-00/?p=109174

视频

Cache-friendly Design in Robot Path Planning with C++ - Brian Cairl - CppCon 2023 https://www.youtube.com/watch?v=Uw7FF5MLxZE&ab_channel=CppCon

寻路算法,A*之类的,如何缓存友好。STL不太行

valgrind 也可以测试cache性能,判断miss

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
valgrind --tool=cachegrind --cache-sim=yes

perf也可以,就不说了

结论就是 顺序访问 不要跳转 只访问用到的数据 s执行路径里没有malloc

比如std::unordered_multimap::equal_range 内存不连续,miss就很多

"Distributed Ranges": Model for Building Distributed Data Structures, Algorithms & Views - Ben Brock https://www.youtube.com/watch?v=X_dlJcV21YI&ab_channel=CppCon

概念很帅,把range推广到分布式,做的一些工作

代码在这里 https://github.com/oneapi-src/distributed-ranges/tree/main

开源项目推荐

  • • asteria 一个脚本语言,可嵌入,长期找人,希望胖友们帮帮忙,也可以加群753302367和作者对线,最近更新了很多文档
  • • Unilang deepin的一个通用编程语言,点子有点意思,也缺人,感兴趣的可以github讨论区或者deepin论坛看一看。这里也挂着长期推荐了
  • • https://github.com/infiniflow/infinity 一个向量数据库,用了c++20的一些特性,挺有意思
  • • https://github.com/avaneev/komihash 一个hash库,速度比xxhash wyhash快,挺有意思的
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-12-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 CPP每周推送 微信公众号,前往查看

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Java开发MQTT实例代码分享
所以,有求必应哈!!!那么这期就来个Java版本的示例代码。当然,个人本身不熟悉IT这类语言,所以难免有些问题,各位朋友如果发现有问题,请在留言区不吝赐教哈!!!
Hello工控
2025/06/08
880
Java开发MQTT实例代码分享
MQTT的奇妙之旅:探索RabbitMQ Web MQTT插件的威力【RabbitMQ 十一】
在网络通信的大舞台上,每一次的消息传递都是一场无声的盛宴。而今,我们将揭开这场盛宴的一部分面纱,进入 RabbitMQ Web MQTT 插件的世界。想象一下,在 Web 端如何借助 MQTT 协议和 WebSockets,实现即时、高效的消息通信。这是一场关于现代通信艺术的盛宴,而 RabbitMQ Web MQTT 就是引领我们踏上这场盛宴的神奇之物。
一只牛博
2025/05/30
970
MQTT的奇妙之旅:探索RabbitMQ Web MQTT插件的威力【RabbitMQ 十一】
理解MQTT和Websocket在物联网中的差异
MQTT 和 WebSockets 并不是彼此的竞争关系,而是互补的。MQTT 是为物联网设计的(尽管当时并没有称之为物联网),而 WebSocket 协议则是为了给浏览器中的应用程序提供基于 TCP 的 socket API 访问,因此称为“WebSockets”。
Hello工控
2025/06/08
930
理解MQTT和Websocket在物联网中的差异
物联网项目:充电桩项目实战~
MQTT,全称Message Queuing Telemetry Transport,即消息MQTT,即消息队列遥测传输,是一种基于客户端-服务器的消息发布/订阅传输协议。这种协议的设计思想是轻量、开放、简单和规范,因此易于实现。
田维常
2023/11/15
1.8K0
物联网项目:充电桩项目实战~
一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布
之前介绍了RabbitMQ以及如何在SpringBoot项目中整合使用RabbitMQ,看过的朋友都说写的比较详细,希望再总结一下目前比较流行的MQTT。所以接下来,就来介绍什么MQTT?它在IoT中有着怎样的作用?如何在项目中使用MQTT?
章为忠学架构
2023/10/06
21.6K2
一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布
Java物联网开发(一) —— MQTT协议
官方文档传送门 mqtt官网 mqtt中文网 mqtt 3.1.1 英文文档 mqtt 5.0 英文文档 b站mqtt教程
时间静止不是简史
2021/08/12
10K0
Java物联网开发(一)  —— MQTT协议
java连接MQTT服务器(Springboot整合MQTT)
硬件采集的数据传入EMQX平台(采用MQTT协议),java通过代码连接MQTT服务器,进行采集数据接收、解析、业务处理、存储入库、数据展示。
全栈程序员站长
2022/09/02
6.9K0
Java使用EMQX实现MQTT通信
在上一篇文章 《Java使用modbus4j实现ModbusTCP通信》 中我们介绍了Java与Modbus协议的TCP通信,本文讲解一下如何用Java实现对当下最流行的物联网协议之一的MQTT协议进行通信。
Jensen_97
2023/07/20
1.7K0
Java使用EMQX实现MQTT通信
消息通讯——springboot集成MQTT
可以下载: 链接:https://pan.baidu.com/s/1c9CfyhT4CSY2FEOa1OgxPw 提取码:siwg 也可以用对应的cdn 地址
不愿意做鱼的小鲸鱼
2022/09/26
3.4K0
消息通讯——springboot集成MQTT
在 Java 中使用 MQTT:实现高效的消息传递
MQTT(Message Queuing Telemetry Transport)是一种轻量级的消息传输协议,专为低带宽、高延迟或不稳定的网络环境设计。它广泛应用于物联网(IoT)、机器对机器(M2M)通信以及实时数据传输等领域。本文将详细介绍如何在 Java 中使用 MQTT 协议实现高效的消息传递。
Front_Yue
2024/10/14
2.4K0
在 Java 中使用 MQTT:实现高效的消息传递
如何用Java实现一个基于MQTT协议的发布订阅示例
根据百度百科定义,MQTT是ISO 标准下基于发布/订阅模式的协议。它基于TCP/IP协议,具有轻量、简单、开放和易于实现的特点。该协议广泛应用于机器间通信,即物联网领域。它是为硬件性能低下的远程设备以及网络状况不佳的情况下而设计协议,为此,它需要一个消息中间件(MQTT Broker,可以理解为Server端。)MQTT协议这些特点使它适用范围非常广泛。
玖柒的小窝
2021/10/23
3.2K0
如何用Java实现一个基于MQTT协议的发布订阅示例
C语言代码封装MQTT协议报文,了解MQTT协议通信过程
MQTT是一种轻量级的通信协议,适用于物联网(IoT)和低带宽网络环境。它基于一种“发布/订阅”模式,其中设备发送数据(也称为 “发布”)到经纪人(称为MQTT代理),这些数据被存储,并在需要时被转发给订阅者。这种方式简化了网络管理,允许多个设备在不同的网络条件下进行通信(包括延迟和带宽限制),并支持实时数据更新。它是开放的,可免费使用并易于实施。
DS小龙哥
2023/05/27
2.8K0
C语言代码封装MQTT协议报文,了解MQTT协议通信过程
消息通讯——MQTT的入门和使用
EMQ X (Erlang/Enterprise/Elastic MQTT Broker) 是基于 Erlang/OTP 平台开发的开源物联网 MQTT 消息服务器。 EMQ X 设计目标是实现高可靠,并支持承载海量物联网终端的MQTT连接,支持在海量物联网设备间低延时消息路由: 1. 稳定承载大规模的 MQTT 客户端连接,单服务器节点支持50万到100万连接。 2. 分布式节点集群,快速低延时的消息路由,单集群支持1000万规模的路由。 3. 消息服务器内扩展,支持定制多种认证方式、高效存储消息到后端数据库。 4. 完整物联网协议支持,MQTT、MQTT-SN、CoAP、LwM2M、WebSocket 或私有协议支持。
不愿意做鱼的小鲸鱼
2022/09/26
3.2K0
消息通讯——MQTT的入门和使用
EMQX体验
    物联网大多基于MQTT协议进行消息传输,其中EMQX是比较流行的开源实现,EMQX简单易用,社区资源丰富,可参加官网https://www.emqx.com/,本文是简单初探,通过安装EMQX、客户端测试,代码测试等三块进行一个体验。
尚浩宇
2023/03/23
8640
EMQX体验
如何在 Java 中使用 MQTT
MQTT 是一种基于发布/订阅模式的 轻量级物联网消息传输协议 ,可在严重受限的硬件设备和低带宽、高延迟的网络上实现稳定传输。它凭借简单易实现、支持 QoS、报文小等特点,占据了物联网协议的半壁江山。
EMQ映云科技
2022/08/30
2.3K0
2024年度实用技术总结:基于Spring Boot的MQTT高效通信实践
在2024年的开发实践中,MQTT协议在物联网和工业软件系统中的应用越来越广泛。结合Spring Boot开发高效的MQTT通信系统,既能确保数据的稳定传输,又能提升系统的可扩展性和性能。本篇文章总结了一年来在MQTT开发中的一些实操经验,供大家参考。
Marblog
2025/02/05
2310
C# 链接 MQTT 的简单示例
以下是一个使用 C# 链接 MQTT 的简单示例代码,使用了M2Mqtt库(这是一个流行的用于 C# 开发中与 MQTT 协议通信的库):
软件架构师Michael
2024/12/30
7600
springboot + rabbitmq 做智能家居,我也没想到会这么简单
前一段有幸参与到一个智能家居项目的开发,由于之前都没有过这方面的开发经验,所以对智能硬件的开发模式和技术栈都颇为好奇。
程序员小富
2020/06/21
2.5K1
springboot + rabbitmq 做智能家居,我也没想到会这么简单
SpringBoot整合MQTT并实现异步线程调用
基于SpringBoot通过注解实现对mqtt消息处理的异步调用 使用背景 生产环境下, 由于mqtt 生产者生产的消息逐渐增多, 可能会导致消息堆积. 因此需要消费者去快速的消费. 而其中的一个方案便是使用异步线程去加速消费消息. 下面介绍下思路 我们可以在原来的mqtt工具类上面进行改装. 首先创建一个类MqttMessageListener并继承IMqttMessageListener实现messageArrived, 用于处理这些消息(业务编写) 然后改写mqtt客户端订阅的方法, 注
时间静止不是简史
2022/01/05
6.6K19
为什么最近每份 Android 简历都说 “熟悉 MQTT 协议”?
MQTT 是一种基于发布 - 订阅模型的消息传递协议,在物联网和移动应用有较广泛的应用。如果你的目标是冲击中高级工程师岗位,MQTT 或许是一个不错的亮点。最近,我还发现很多候选人会在简历中写自己 “熟悉 MQTT 协议”,但多数人只是停留在了解或用过的程度。
用户9995743
2022/12/22
4.6K0
为什么最近每份 Android 简历都说 “熟悉 MQTT 协议”?
相关推荐
Java开发MQTT实例代码分享
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验