Skip to content

败犬日报 2024-10-28

1. std::optional 为什么不提供引用版本的特化?

https://www.zhihu.com/question/2190539707/answer/16155736654

其实在 C++ Core Guidelines 里有建议说使用 T* 代替 std::optional<T&>。个人认为这只能是权宜之计,语义上不是特别合适。T* 本身所有权信息是非常模糊的,只能在文档中加以额外规定,并且 T* 也没法使用 std::optional 的 and_then / or_else 等 monadic 方法。

觉得语义模糊可以考虑封装一下。

2. 语言只有两种,c++ 和偷腥猫

还在败犬。

3. static 全局变量放头文件是不是不太对

坏文明,每个编译单元都会有一份。

群友:算是偷懒的做法,之前因为这个导致 binary dynamic loading latency 增加了几倍。

4. 面试反问环节:咱们目前用的是哪个 C++ 版本?

re: Java8

5. C++ 升个版本有那么难吗

正常情况下版本就是要规律更新的啊,语言也好依赖也好。锁死在某个旧版本是会欠技术债的。

一万年不升级,突然有一天想升,那当然全是问题;如果有完善的 CI,定期升小版本,基本每次升级一片绿,稍微改几个 deprecated 的接口,不是多恐怖的事情。

之所以叫债,就是因为它总有一天要还的。

当然这种事情是技术团队负责人而不是普通打工人应该做的。

6. 终面被问设计模式了

群友:我觉得我能说出某个情况该怎么设计,但是完全不知道名字。

7. 差点写出一个实例化 O(2^n) 次的类模板

手写了模板函数代替 if constexpr,容易有多余的模板展开。

8. 原来要看 merge 需要写 ^1 ^2

比如你的 HEAD 是个 merge commit,那你要 git show HEAD^1 git show HEAD^2 才是两端的 commit 的内容。

merge commit 就只是 merge。