败犬日报 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。