我应该去打盘dota而不是打这些字

我应该去打盘dota而不是打这些字

猪头鹅饲养员

哎果然这位跟我见过的所有被 C 把脑子搞坏的一样,已经没救了……下面是写给后面来的人类看的:


有一件特别有意思的事情,喜欢说 C 是多么自由的人脑子都会被 C 搞成一个模子刻出来的,它们所支持和反对的东西都一模一样。比如这里能看到的常见病症:指针,inline ,底层 /精细控制。


指针

众所周知,喜欢裸指针满天飞的人一定会把 raw pointer 和 shared_ptr 对立起来,正如一说 Apple 不好你就是用华为的 XX ,一说 Go 错误处理很弱智你就是 Java 写 try catch 写傻的一样,一说 printf 不好你就是个只知道 std::cout 的智障一样。再加上手动增减引用计数比 RAII 更可靠的神论……我受不了了……居然还指着一个内部 private/protected/public 乱飞还藏着个 virtual destructor 的 class 讨论跨二进制……不行还是回去复习一下 COM 是怎么搞的吧,Essential COM 第一章就行(顺便思考一下为什么 COM 刚诞生没几年 C++98 还不存在的年代人们就开始琢磨着设计智能指针了

另外可以思考一下裸指针手动释放配合多个退出路径是件多么可怕的事情,在 goto 和 goto 到的进行集中错误处理的地方中间会发生什么可怕的事情,为什么要有 unique_ptr ,为什么它生于 C++11 (哦我突然悟了:这种人永远只跟 shared_ptr 过不去是不是因为学不会 value category ?),它最后(在你不手动塞进去奇怪的 deleter 的时候)生成的代码真的和裸指针有区别吗(当然前提是后者用对了并确实持有所有权),再思考一下什么人会在别人指着拿指针传进去的字符串的时候第一个反应不是证明这里不适合用(w)string_view (比如:「我就是喜欢一遍遍算 strlen !」)而是拐到了 shared_ptr 上面去(另外正常人也别写这种 string 转 wstring 都能搞得一坨 magic number 乱飞的代码,不会转可以塞进 std::filesystem::path 让它自己转(别管它是不是个 path ),虽然听着很整蛊但用起来意外得还可以)……

C 风格指针恶心人的程度已经是罄竹难书了,这连一半都不到,算了反正说了也白说赶紧快进到下一个……


inline

inline 确实不是截图里面的,我点进这位的 GitHub 搜了一下 BasicBitmap 才发现了这么多搞笑的东西,不行实在是憋不住了我得分享一下,一个小小的 BasicBitmap 里面包含了:inline 的写在类定义里面的函数,static inline 函数,写在.cpp 里面的 inline 函数,inline 的 constructor (可惜还差一个 inline template function )……能把 inline 用的这么幽默的真的建议跟 Google 的天才们合作续写它们那个害人的 Style Guide ,解释一下 inline variable 是如何「内联优化」变量的

(如果后面的读者不想变得这么搞笑:inline 是让你处理 one-definition rule 的,或者再简化一点,inline 的意思是「你可以就把定义写在这」永远忘了内联优化这回事)


底层

看到《底层》《精细控制》这种关键字就知道又碰到高贵的《高级汇编》程序员了,这种早就说烂了,但没办法,这帮人就是不听不学不看……自行搜索 abstract machine 找个 talk 听一下( CppCon 上前两年就有一个),不知道多少年前就配合编译器优化面向这玩意“声明式”编程了,还做着自己真的控制了编译出来的汇编的春秋大梦呢(顺便这种人恐怕一半不知道 CPU 上最后执行的不是一条条的汇编指令),实在不信找份 C++98 的文档(我感觉 C89 都行),搜一下 volatile 是干嘛用的。

顺便看一眼 strict aliasing rule ,懒得搜可以直接读 https://www.ralfj.de/blog/2018/07/24/pointers-and-bytes.html 这个系列,再看看 C 语言大师们起手-fno-strict-aliasing 然后觉得自己特懂底层(没办法,只要一天觉得 C 直接对应汇编就一天理解不了这玩意)……不行了赶紧快进到最后


bonus

我看到图形引擎四个字终于想起来了……后面的人请打开 https://www.zhihu.com/question/29636221/answer/45102191 ,跳到 DirectX 那一节,然后跳到最后打开评论区看第一条评论的时间来推测写作时间……啊 2015 年……彼时 Metal 、DX12 、Vulkan 这一批现代图形 API 都已现世,早就翻来覆去讲清楚了传统状态机式图形 API 是一件多么恶心人的事情,在这个时间点居然能舔得下去 OpenGL……我已经说不出来话了,哪位心理学大师能帮我分析一下为什么一个这么热爱《底层》《精细控制》的人能喜欢上 OpenGL(以及这么喜欢肥硕的状态机怎么不去拥抱 iostream 每次调个复杂点的格式都一大串<<<<<<<<<<<<<)呢?


最后,作为联邦制语言,C++当然不止一种写法,但所有主动写 C with class 的 100%连基本的东西都没弄懂,永远在传播错误的认识,为了让环境更加恶劣而不懈奋斗(一个新手进来随便一搜点什么,99%几率匹配上这帮人写出来的东西,太恐怖了……我见过上一个环境这么离谱的地方是 dota2 天梯……唉我打这些字的时间还不如开盘 dota )

Report Page