从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态
周刊项目地址|在线地址 |知乎专栏 | 腾讯云+社区 |
欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue
最近有点忙cppcon视频没看完
编译器信息最新动态推荐关注hellogcc公众号 本周更新 OSDT Weekly 2021-12-01 第126期
手把手教你写sender/receiver
核心想法就是这个
这个看个乐,代码
$ cat a.c
#include <arpa/inet.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <err.h>
#include <stdlib.h>
#define PORT 12345
int
main() {
int sock;
// 加这行就不报错了 socklen_t length, s_size;
struct sockaddr_storage server;
struct sockaddr_in6 *sin = (struct sockaddr_in6 *)&server;
// 加这行也不报错 memset(sin, 0, sizeof(*sin));
if ((sock = socket(PF_INET6, SOCK_STREAM, 0)) < 0) {
err(EXIT_FAILURE, "socket");
/* NOTREACHED */
}
if (inet_pton(PF_INET6, "::1", &(sin->sin6_addr)) != 1) {
err(EXIT_FAILURE, "inet_pton");
/* NOTREACHED */
}
sin->sin6_family = PF_INET6;
sin->sin6_port = htons(PORT);
if (bind(sock, (struct sockaddr *)sin, sizeof(*sin)) != 0) {
err(EXIT_FAILURE, "bind");
/* NOTREACHED */
}
return 0;
}
$ cc a.c
$ ./a.out
a.out: bind: Can't assign requested address
$
这个问题定位下来就是未初始化,解错了数据
switch (f)
{
break; case Foo::Alpha:
s += "is nothing";
break; case Foo::Beta:
s += "is important";
f = Foo::Alpha;
break; case Foo::Gamma:
s += "is very important";
f = Foo::Alpha;
break; case Foo::Delta:
s += "is not very important";
f = Foo::Alpha;
}
哈哈,给我看笑了
c++ tip of week Did you know about static reflection proposal for C++2X?
简单反射,可以这里体验一下https://godbolt.org/z/x55GPdTxE。虽然在clang reflect分支里,但是没合并到主干。这个反射到提案进度也不知道鸽成什么样子了
#include <experimental/reflect>
#include <iostream>
namespace meta = std::experimental::reflect;
template<class... Ts>
struct print_enum {
void operator()() {
((std::cout << meta::get_name_v<meta::get_type_t<Ts>> << ':' << meta::get_name_v<Ts> << std::endl), ...);
}
};
enum class Trading { Quant, Lab };
int main() {
std::cout << meta::get_name_v<reflexpr(Trading)> << std::endl; // prints Trading
std::cout << meta::get_name_v<reflexpr(Trading::Quant)> << std::endl; // prints Quant
std::cout << meta::get_name_v<reflexpr(Trading::Lab)> << std::endl; // prints Lab
meta::unpack_sequence_t<print_enum, meta::get_enumerators_t<reflexpr(Trading)>>{}(); // prints Trading::Quant, Trading::Lab
}
之前说过,这个人的博客权重很高,讲了很多性能优化相关的东西
这里简单列一下
- 只优化热点,冷的地方没必要花时间
- 工程实践,比如能用stl算法不用,能用range -for不用
值得一看。看思路
作者说自己的parser库多么多么图灵完备
clang的libc++的deque的push_front在糟糕场景下可能会有O(logN)的效率,注意使用
博客内容是从代码汇编来分析到底耗时在哪里。没有展开看
介绍一些c的莫名其妙的细节,比如include可以当函数,数组是指针别名等等。这里就不展开了。还是不要知道的好
就是实现一个Status错误类型,所有函数都走这个不走异常 接口比较简单,点击直达
太多了胖友们,根本看不完。我慢慢消化,可能放在下一期
一个simd实现的算法库,包括find(可以和下面那个简单的比一比),仓库地址
这俩招聘暂时放一个月。主要是没新的
昆仑数据库,魔改mysql的,还支持远程工作,友情推荐一波
现在mysql的代码已经很现代c++了
开发深度学习编译器,而且他们也支持远程工作,c++的,友情推荐一波