C++ 中文周刊 第74期 && 75期
从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态
弄了个qq频道,手机qq点击进入
欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue
74忘记发了。74 75 合着发吧
资讯
标准委员会动态/ide/编译器信息放在这里
编译器信息最新动态推荐关注hellogcc公众号 本周更新 2022-08-03 第161期
文章
c++的bind和网络库的bind符号冲突了。很搞笑。不过在linux环境下没有这个问题
我之前在windows平台遇到过log日志接口和cmath的log函数有符号冲突。msvc这个方面做的不是很好
/*
divide_by_32_no_assume(int):
lea eax, [rdi + 31]
test edi, edi
cmovns eax, edi
sar eax, 5
ret
*/
auto divide_by_32_no_assume(int x) {
return x / 32;
}
/*
divide_by_32_assume(int):
mov eax, edi
shr eax, 5
ret
*/
auto divide_by_32_assume(int x) {
__builtin_assume(x >= 0);
return x / 32;
}
这个之前提到过,有个经典的fast-math开关优化。那个力度比较大。这里你可以自主控制,力度更精细一些
同一个代码段 c和c++有很大区别。主要是逗号表达式,左值右值,位域,类型转换,类型大小,空类型,匿名结构体等等。感兴趣的可以看看。
介绍TSAN的原理
介绍内核内存分配策略
用c++实现structopt, 看个乐
没看明白
一个bug
template<class It>
bool is_palindrome(It first, It last) {
while (first != last) {
--last;
if (first == last) break;
if (*first != *last) {
return false;
}
++first;
}
return true;
}
很自然的,可以改写成
template<class It>
bool is_palindrome(It first, It last) {
return std::equal(
first, last,
std::reverse_iterator(last),
std::reverse_iterator(first)
);
}
这里没用make_reverse_iterator,用的CTAD自动推导。但是这个推导可能不是我们预想的那样
std::string s = "foo";
assert(!is_palindrome(s.begin(), s.end()));
assert(is_palindrome(s.begin()+1, s.end()));
assert(!is_palindrome(s.rbegin(), s.rend()));
assert(is_palindrome(s.rbegin(), s.rend()-1)); // Fails! Oof!
最后两个例子,已经是reverse的iterator, CTAD什么都不做,而不是推导成 reverse_iterator<iterator>
这种东西,所以报错了
尽量别用CTAD。降低入门门槛但是引入了背景,不熟就掉坑
基础知识。值得看看
static_assert(typeid([]{}) != typeid([]{}));
template<auto = []{}>
struct foo{};
foo f1, f2;
static_assert(typeid(f1) != typeid(f2));
没什么卵用的知识,也是一个坑
利用concept和constexpr代替enable if 代码不列举了
int main()
{
constexpr auto factorial23 = [](this auto&& self, int n) {
if (n <= 1)
return 1;
return n * self(n - 1);
};
static_assert(factorial23(5) == 120);
}
递归+编译期 lambda,玩的花
分析bug挺有意思
老生常谈了,可读性问题,别用bool做多个参数,不然分不清啥是啥
简单压测,QT的信号槽比虚函数观察者模式并不快。看个乐
仓库在这里https://github.com/rnburn/rules_cc_module
总算支持了
一个课程,可以看看
值得一看,拓展思路
又是SIMD。可以看看
gdb调试。值得一看
视频
代码在这里https://compiler-explorer.com/z/nbGGdMM4b
开源项目需要人手
- asteria 一个脚本语言,可嵌入,长期找人,希望胖友们帮帮忙,也可以加群384042845和作者对线
- pika 一个nosql 存储, redis over rocksdb,非常需要人贡献代码胖友们, 感兴趣的欢迎加群294254078前来对线
新项目介绍/版本更新
- userver yandex微服务框架。轻松拼凑出可用微服务,内置http/grpc
- hspp Haskell Style Programming brought to C++ 不懂haskell 不评价
- flecs 又一个ECS框架
- YACLib Yet Another Concurrency Library
- HPX 1.8.1 Released
- Using Landlock to Sandbox GNU Make
- hscpp: A library to hot-reload C++ at runtime
- static_functional
- Compile time finite state machine 编译期状态机
- boost 1.80.0 没有新库,一堆bugfix
- boost.url 一个URL库
- 手把手写c编译器
- 一个c++20 rpc框架
工作招聘
看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!也可以帮忙点赞收藏转发!多谢支持!