从reddit/hackernews/lobsters/meetingcpp摘抄一些c++动态
编译器信息最新动态本周更新 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;
}
哈哈,给我看笑了
#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
}
之前说过,这个人的博客权重很高,讲了很多性能优化相关的东西
这里简单列一下
值得一看。看思路
作者说自己的parser库多么多么图灵完备
clang的libc++的deque的push_front在糟糕场景下可能会有O(logN)的效率,注意使用
博客内容是从代码汇编来分析到底耗时在哪里。没有展开看
介绍一些c的莫名其妙的细节,比如include可以当函数,数组是指针别名等等。这里就不展开了。还是不要知道的好
就是实现一个Status错误类型,所有函数都走这个不走异常 接口比较简单,点击直达
太多了胖友们,根本看不完。我慢慢消化,可能放在下一期
一个simd实现的算法库,包括find(可以和下面那个简单的比一比),仓库地址
看到这里或许你有建议或者疑问或者指出错误,请留言评论! 多谢! 你的评论非常重要!
This site is open source. [Improve this page](https://github.com/wanghenshui/cppweeklynews/edit/dev/posts/040.md).