从 GCC 方言到 C++11:对齐这事,终于不用靠传说了
那会儿我们写 C。也写一点 C with classes。项目不大。胆子不小。我们总觉得。内存嘛。不就是一排字节。指针嘛。不就是一把钥匙。直到有一天。线上啪一下。不是逻辑错。是进程没了。还特别挑人。你
阅读全文那会儿我们写 C。也写一点 C with classes。项目不大。胆子不小。我们总觉得。内存嘛。不就是一排字节。指针嘛。不就是一把钥匙。直到有一天。线上啪一下。不是逻辑错。是进程没了。还特别挑人。你
阅读全文有段时间。我们写程序。写着写着就会开始用线程。一个请求一个线程。或者一个线程池。那时候的痛点很朴素。我想要一个“全局变量”。但我只想让它对当前线程有效。别的线程别来碰瓷。那些年:没有“每线程一份全局”
阅读全文那是很多年前。办公室的灯。经常亮到半夜。我们写的 C++。其实就是 C。外加一点 class。那时候最响的一句话是。“能跑就行。”后来我才知道。有些东西。一旦“能跑”。就会跑去你没想到的地方。那会儿的
阅读全文十几年前。大家写 C。后来写 C with classes。代码里最常见的“类型”。就俩。int。double。数字一多。单位就开始飘。今天你写的是“500”。明天别人读成了“500”。然后线上啪一下
阅读全文那会儿我们写 C++。还是 “C with classes” 那味。项目不大。但线上一样会出事。出事的时候。你不会先怀疑字符串。你会先怀疑自己的人生选择。有一次半夜。线上突然开始找不到配置文件。日志里
阅读全文那会儿我们写 C++。很多人嘴上说 C++。手里其实还是 C。最多再加点 class。构造函数也一样。它看起来像“自动帮你把对象弄好”。但你真写过几天。就会发现它更像“手动装配流水线”。而且没有复用。
阅读全文你写下 p->foo()。看起来像一句话。像一句很普通的话。可在当年。这句话是很多人用 crash 堆出来的。而且那种 crash。通常还不在你写错的地方。“C++ makes it harder t
阅读全文那时候还没有“接口”这个词。大家写的更多是“约定”。写在邮件里。写在 README 里。写在某个老同事的脑子里。然后项目一大。约定就开始漏风。在没有纯虚函数的年代:大家怎么写“可扩展”的代码C 时代的
阅读全文异常这东西。在 C 的世界里。它一开始其实很朴素。函数失败了。就返回一个值。-1。或者塞个 errno。你再写一层。就再把这个值往上抛。一路抛到 main。人也跟着老了几岁。后来 C++ 来了。带着类
阅读全文那会儿我刚从 C 走到 C with classes。项目不大。人也不多。我们写代码的标准很简单。能跑。就算赢。直到有一天。同一份程序。在我机子上不炸。到了客户那台机器。啪一下。我去问原因。没人能一句
阅读全文有段时间。大家写“面向对象”。但代码看起来还是 C。一个 struct。再塞几根函数指针。能跑。也挺灵活。然后某天。 线上炸了。你去看 core dump。发现是一个空指针。指向一张你以为“永远不会空
阅读全文那是一个很老的坑。老到它比“现代 C++”还早。老到你第一次见到它。会怀疑:是不是我把语言学错了。它不报错。它也不崩。它只是很安静地。做了你没预期的事。当年没有“虚函数”这个词先把时间拨回去。那会儿很
阅读全文那些年。你写的是 C。写着写着。就写成了“带点 class 的 C”。编译器不怎么唠叨。IDE 也不怎么提醒你:这行代码危险。你要把一个东西当成另一个东西用。最顺手的,还是那一对括号。你写的时候很放心
阅读全文那会儿写 C++。大家都挺自信。尤其是刚把代码“改对”。编译通过。单元测试也绿了。你心里想。这事就算完了。然后线上给你回了一巴掌。不是崩溃。更讨厌。它“能跑”。只是行为不对。而且还很像“偶发”。你开始
阅读全文那时候写代码。大家更信指针。也更怕指针。你想写“通用代码”。比如你写了个小绘图工具。里面有圆。有矩形。还有些你自己临时加的形状。你只想写一段循环。让它们自己把自己画出来。在坑里长大的“多态”上世纪 8
阅读全文那时候大家刚学完 C。手里最顺的一招。就是“按值传”。不想碰指针。不想挨空指针的骂。更不想半夜被段错误叫醒。所以你很自然会想。把对象拷一份进函数里。我用我的。你用你的。互不干扰。听起来挺靠谱。后来 C
阅读全文今年DeepSeek爆火,生成式AI和大模型技术呈现爆发式增长,也让算法工程师重新成了炙手可热的岗位,岗位薪资远超很多运维、嵌入式、前后端岗位,在程序员中稳居前列。AI的快速发展也给很多程序员带来更多
阅读全文多重继承这东西。一开始不是为了炫技。是为了活下去。那是 80 年代。C++ 还叫 C with Classes。项目开始变大。文件多。人也多。复用的冲动特别真实。你写了一套“通用能力”:能打印,能扫描
阅读全文有些语法。长得像小修小补。当年却真救过人。你写着写着。会突然发现。你想复用一个基类。但你不想把它的所有东西都“送出去”。更麻烦的是。你还不想为了这点事。去改基类。回到 C with Classes 的
阅读全文80 年代的工程师很少一上来就讨论“对象模型”。他们更常讨论的是。这段代码能不能少复制一点。这个模块能不能少改几处。这个改动能不能别把整个项目带崩。那时候 C with Classes 还很年轻。你能
阅读全文——给求职焦虑的你,一个能写进简历、也能讲进面试的虚拟 CPU 项目很多年之后。你再回头看那段找工作的时间。大概率只记得两件事。一件事。刷题。刷到怀疑人生。另一件事。面试官翻着你的简历。抬头问一句:“
阅读全文很久以前。大家写 C。想复用。只能复制粘贴。或者写一堆宏。也有人开始玩“结构体套结构体”。看起来像继承。但谁都知道。这东西全靠自觉。自觉这种东西。最不可靠。C with Classes 出现以后,新的
阅读全文那会儿大家写 C。写在一堆 .c 和 .h 里。项目开始变大。但工具和语言,还是那个工具和语言。你想复用一段逻辑。第一反应不是“继承”。第一反应是:复制粘贴。然后祈祷别漏改。再然后。你就会开始讨厌自己
阅读全文你第一次见到 std::move。大概率会被名字骗一下。move。那不就是“移动”吗。于是你心里会冒出一个很自然的画面。我把东西 move 走。原来的地方就空了。然后你会以为性能会更好。故事要从更早的
阅读全文那会儿我刚从 C 走到 C with classes。项目不大。人也不多。我们写代码的标准很简单。能跑。就算赢。直到有一天。同一份程序。在我机子上不炸。到了客户那台机器。啪一下。我去问原因。没人能一句
阅读全文八十年代初。贝尔实验室里有一拨人。他们在用 C 写系统。代码能跑。但维护很痛。痛点不新鲜。就是“忘了收尾”。忘了 destroy。忘了 free。忘了某个 init。然后线上开始讲鬼故事。有人想把这事
阅读全文decltype 这玩意,到今天都像个老朋友……它不是为了让你写得更“高级”,而是为了让类型别再靠猜。你写模板写到凌晨,就会理解这句话的分量。那会儿还叫 C++0x,标准还没定,可项目已经要交付了。你
阅读全文——给想把“内存管理/RAII”真正讲清楚的你,一套可验证的硬核训练很多年之后。你再回头看那段找工作的时间。大概率会记得两件事。一件事。刷题。刷到怀疑人生。另一件事。面试官翻着你的简历。抬头问一句:“
阅读全文我第一次被“静态成员”坑到。不是崩溃。是链接错误。那种很有年代感的红字。undefined reference to Foo::kCount当年我还以为自己把 C++ 写坏了。后来才明白。我只是把“变
阅读全文我第一次真正在意“常量”。不是因为它难。是因为它太容易被写错。然后还很难查。那会儿我在修一个老项目。头文件里全是 #define。像家谱。谁也不敢动。但线上就是这么爱挑这种时候出事。某次夜里。报警响了
阅读全文