layout | title |
---|---|
post |
第48期 |
从reddit/hackernews/lobsters摘抄一些c++动态
欢迎投稿,推荐或自荐文章/软件/资源等,请提交 issue
春节快乐各位,年前最后一更,下周也不更,安心过年吧
标准委员会动态/ide/编译器信息放在这里
编译器信息最新动态推荐关注hellogcc公众号 本周更新OSDT Weekly 2022-01-26 第134期
int main() {
auto opt = std::optional{42};
opt.and_then([](auto o)->std::optional<int>{ std::cout << o;; return std::nullopt; });// prints 42
}
没啥说的,以前说过,早就该加了
#include <typeinfo>
#include <type_traits>
static_assert(std::is_same_v<int, int>);
static_assert(typeid(int) == typeid(int));
static_assert(typeid(int) == typeid(const int));
static_assert(not std::is_same_v<int, const int>);
static_assert(typeid(int) == typeid(const int&));
static_assert(not std::is_same_v<int, const int&>);
这东西总算不是运行时了。不然真没人用
出于值语意以及编译器优化角度考虑,不建议const成员,不方便move/swap,但是如果你是单例就忽略
struct Employee {
std::string name_; // an employee's name may change...
const std::string id_; // ...but never their unique ID
};
Employee e1 = {"Alice", "12345"};
Employee e2 = {"Bob", "24601"};
e1 = e2; // oops
std::swap(e1, e2); // oops
返回值也不建议const, 拿了不能改,图啥呢
struct Widget {
std::string name_;
const std::string name() const { return name_; }
};
局部不变量,用constexpr
constexpr size_t chunkStart = sizeof(BlockHeader) + sizeof(ChunkHeader);
局部返回值,不const,可能会阻止优化
std::string g(bool early) {
if (early)
return "";
const std::string result = "hello";
return result; // oops
}
其他场景,比如const引用传参数(大对象)该用用,没问题
介绍constexpr的演化
能用std::span就用,std::span做接口可以兼容std::array 内置c数组,std::vector,且前两个,最终效果一致,大大的隐藏了内置数组的坑爹效应
- Micro C, Part 1: Parsing 教你用llvm和haskell写c编译器
- Writing a simple 16 bit VM in less than 125 lines of C
一百行代码让你看懂VM,代码在这里
linux的一个patch ,TCP有性能提升
std::for_each(std::execution::par, input.cbegin(), input.cend(),
doStuff);
没啥说的,c++17的东西
讨论省分支的技巧,其实主要是省cpu,利用cpu的pipeline,所以循环可以展开,分支可以尽量省掉
用冒号表达式,用bool 做index的jump table
term[2] = {expr1, epxr2};
sum += term[bool(cond)];
likely也可以用
其实更多是演示,值得看一看
作者写了本新书The Art of Writing Efficient Program,有机会可以读读
教你用协程来把单个操作聚合成pipeline,更高效
没有PPT啊,这个视频讲了很多实用的concept设计
代码https://github.com/GabrielDosReis/ipr, https://github.com/microsoft/ifc-spec TODO没看懂干嘛的
看开源项目的文档,学学人家怎么写代码文档的
讲设计模式的,这名字,典型德国人
手把手教你写static_vector
写单测,要写就写最难的
手把手教你学汇编,值得一看
手把手教你用c++描述sql
- asteria 一个脚本语言,可嵌入,长期找人,希望胖友们帮帮忙,也可以加群753302367和作者对线
- metacpp 一个反射库,依赖libclang