全部安全开发新闻数码摄影汽车北京AIIT其他
  • 文章封面

    一次 return 可能多做 1 次大拷贝?

    作者:everystep发布日期:2026-02-12 07:00:00

    那会儿我们写 C++。还不叫 C++11。还叫 C++03。大家对“拷贝构造”这件事。有一种很天真的信任。觉得它应该不贵。反正代码看起来很干净。直到某天线上延迟突然抬头。你才发现自己在热路径上复印东西

    阅读全文
  • 文章封面

    lambda 不是语法糖:它把“生命周期”这笔账摊在你面前

    作者:everystep发布日期:2026-02-12 07:00:00

    那几年,写 STL 算法像背咒语。你会在代码里看到 bind1st、bind2nd、mem_fun。像一串古老的法术名。懂的人很淡定。不懂的人会怀疑自己是不是学错了语言。当年的痛点其实很朴素。你只是想

    阅读全文
  • 文章封面

    写过线程但总心虚?从一次小事故聊 C++11 的内存模型与 atomic

    作者:everystep发布日期:2026-02-11 07:00:00

    并发里最吓人的东西。不是线程。也不是锁。是那句“当然”。“当然我先写 data。”“当然再写 ready。”“当然别人看到 ready,就能看到 data。”当年大家就是这么想的。因为单线程一直这么活

    阅读全文
  • 文章封面

    typedef 还行,但 using 更像人话

    作者:everystep发布日期:2026-02-11 07:00:00

    typedef 这东西。老。但它当年是救命的。那会儿你想写一点“通用代码”。类型名一长就失控。你以为自己在写程序。其实是在抄模板参数。typedef 就像一根救生绳。先把你从类型海里拽出来。然后你会更

    阅读全文
  • 文章封面

    位运算最阴的坑:你以为你在写“位”,其实你在写“谜语”

    作者:everystep发布日期:2026-02-10 07:00:00

    很久以前。写 C 的年代。你想表达“某一位是 1”。文档上画的是一格一格的二进制。代码里却只能写十六进制。于是大家开始背。0x80 是第 7 位。0x40 是第 6 位。0x20 是第 5 位。背熟了

    阅读全文
  • 文章封面

    我对 C++11 线程库的理解:先把坑踩一遍再讲概念

    作者:everystep发布日期:2026-02-10 07:00:00

    先说句不那么体面的真相。当年写线程。很多时候不是在写业务。是写“平台差异”。Linux 这套。Windows 那套。你写的是 void*。你传的是 void*。你 debug 的也是 void*。有些

    阅读全文
  • 文章封面

    编译期不是炫技,是止血:relaxed constexpr 把事故变成编译错误

    作者:everystep发布日期:2026-02-09 23:01:39

    C++11 刚落地那会儿。大家一边兴奋。一边心里发虚。兴奋是因为。终于能写点新东西了。发虚是因为。编译器跟不上。你写的代码。不一定能过。更烦的是。它就算过了。也可能在你看不见的地方“偷偷干活”。比如。

    阅读全文
  • 文章封面

    当年大家都在手搓 0..N-1:后来标准库把这招收编了

    作者:everystep发布日期:2026-02-09 23:01:39

    那会儿是 2013 年。C++11 刚从标准里出来没多久。编译器们各自“支持一点点”。你在博客上刷到一句话。“可变参数模板很强。”你一激动。想把自己的小项目也写得像个库。结果写着写着就卡住了。不是不会

    阅读全文
  • 文章封面

    线上啪一下:你以为只是少写几个字,结果修出悬空指针

    作者:everystep发布日期:2026-02-05 11:00:00

    C++11 刚出来那会儿。大家刚学会写模板。写得挺兴奋。直到你要给函数写返回类型。手就停住了。不是不会。是你突然发现。你得把同一个类型。写两遍。一遍在表达式里。一遍在签名里。而且还得保证。永远一致。这

    阅读全文
  • 文章封面

    auto 省下来的字,最后会让你加班

    作者:everystep发布日期:2026-02-05 11:00:00

    很久以前。你写 C++。还没有 auto。返回类型就得老老实实写全。写 wrapper 的时候。最先累的是手。然后是眼睛。再然后。你开始想办法“少写点”。typedef。宏。还有一句自我安慰。“我知道

    阅读全文
  • 文章封面

    写 C++ 的人迟早会懂:时间最怕“看不见的单位”

    作者:everystep发布日期:2026-02-04 07:00:00

    我第一次被“时间单位”坑。很久以前。久到我还以为“超时”这种东西。只会发生在别人家。结果它找上门了。而且一点都不高级。就是单位写错。当年:时间单位靠人脑记在 C 的世界里。你写延时,常见就是这些。sl

    阅读全文
  • 文章封面

    宏把你拆成两个世界:用变量模板把它钉回去

    作者:everystep发布日期:2026-02-04 07:00:00

    那会儿写 C++。标准还没给你太多“高级玩具”。但项目该写还是得写。我们会写一堆常量。配一堆平台。再配一堆开关。你以为你在写一个 MAX_BUF。其实你在写一场“预处理器赌博”。预处理器就是编译前那一

    阅读全文
  • 文章封面

    你以为 unique_ptr 戒了 new?其实只是换了个姿势

    作者:everystep发布日期:2026-02-03 07:00:00

    那会儿 C++11 刚开始进团队。大家第一次认真聊起一句老话。“资源跟着对象走”。对象死了。资源也该跟着收回。听起来很美。但你把代码一翻。还全是 new。你会愣一下。这戒指戴上了。怎么手里还攥着前任送

    阅读全文
  • 文章封面

    当 tuple 像“没名字的 struct”:get<T> 才是真正的“字段名”

    作者:everystep发布日期:2026-02-03 07:00:00

    你写 C。一个函数想多返回点东西。你就把指针塞进去。当年大家都这么干。也不是不行。就是有点别扭。指针一多。你会开始记不清。到底哪个是“耗时”。哪个是“状态码”。后来 Boost 先做了 tuple。B

    阅读全文
  • 文章封面

    RAII + if 初始化语句:把锁的寿命控制到 1 条语句里

    作者:everystep发布日期:2026-02-01 07:00:00

    我见过最离谱的一次线上事故。不是内存越界。不是死锁。是一个迭代器。它本来只该活在一个 if 里。结果它活到了后面。然后我在 debug 分支里顺手用了它。线上就啪一下。这篇文章不背语法。只把一件事讲透

    阅读全文
  • 文章封面

    模板分支从玄学到语句:C++17 给了你一条直路

    作者:everystep发布日期:2026-02-01 07:00:00

    我曾经被模板报错骂过。不是一句两句。是整屏。滚动条都不敢拉到底。你盯着那一堆类型名。像在看一张坏掉的账单。然后你发现。自己只是想写一个“泛型打印”。先补三个词:编译期、实例化、替换失败刚学 C++ 的

    阅读全文
  • 文章封面

    variant / any / 虚函数 怎么选:别凭感觉,按边界条件来

    作者:everystep发布日期:2026-01-31 07:00:00

    我见过一种挺烦的 bug。程序不崩。也不报警。输出看着还挺像回事。但你其实是在用一种类型的眼镜。去读另一种类型的内存。如果你只学过 C,这事多半发生在 union 上。如果你刚开始写 C++,第二次坑

    阅读全文
  • 文章封面

    C++17 CTAD:省掉尖括号之前,先搞清楚它怎么推

    作者:everystep发布日期:2026-01-31 07:00:00

    我第一次嫌 C++ 啰嗦。不是因为语法多。是因为我在写一段代码的时候。经常要把“同一个类型信息”写两遍。你刚学 C++ 的时候。大概率会卡在这里。因为你明明看得见右边的构造参数。却还要在左边再抄一次模

    阅读全文
  • 文章封面

    什么时候用 optional,什么时候该换 expected/variant

    作者:everystep发布日期:2026-01-30 07:00:00

    我最怕那种返回值。它不报错。但它也没告诉你。“这次其实没拿到结果”。你接到的是一个看起来很正常的 int。或者一个看起来很正常的指针。你就照着往下写。一直写到上线。然后某个周五晚上。啪一下。当年:我们

    阅读全文
  • 文章封面

    别再模板递归了:C++17 一行把参数包‘吃掉’

    作者:everystep发布日期:2026-01-30 07:00:00

    我第一次真用上折叠表达式,是在写日志的时候。线上出了点事故。我得把一串变量一次性吐出来。在 C 里你会写 printf。但 C 的 ... 是运行时的。类型信息靠格式串兜着。格式串一写错,崩的就是你自

    阅读全文
  • 文章封面

    做 AI 绕不开的第一步:把文本切对了(BPE 入门但不浅)

    作者:everystep发布日期:2026-01-29 07:00:00

    大模型看起来在“理解文字”。 但它真正处理的,从来都不是文字。你每一次发 Prompt、每一次多花的 Token、每一次上下文装不下、每一次速度变慢、每一次遇到莫名其妙的切分结果,背后都站着同一个角色

    阅读全文
  • 文章封面

    我只是想打个日志,怎么就开始不停构造 std::string 了?

    作者:everystep发布日期:2026-01-29 07:00:00

    我以前写过一个日志函数。上线前我还挺得意:接口统一收 std::string,省心又安全。上线后就尴尬了。CPU 抬头,分配次数也抬头。profile 一看,热路径里一大块都在构造 std::stri

    阅读全文
  • 文章封面

    delete 真相曝光:原来 C++ 一直在“瞎删”

    作者:everystep发布日期:2026-01-28 07:00:00

    早年的 C 世界里,内存更像一张借条。你借走一块。还的时候只还一个地址。不写大小。听起来很离谱?当年大家还真就这么干了,而且干得挺理直气壮。那些年,free 从来不问“你借了多少”在最早的 C 里,m

    阅读全文
  • 文章封面

    宏写到眼瞎的年代结束了:[[deprecated]] 把废弃这事标准化

    作者:everystep发布日期:2026-01-28 07:00:00

    很多年前。我们想“废弃一个函数”。第一反应就是删掉。但你删一次。就会有人跑来敲你。“我升级了库,项目编不过了。”更要命的是。那时候很多库就是一堆头文件。接口发出去。就像把螺丝刀借给全公司。你收不回。所

    阅读全文
  • 文章封面

    写模板像对骂?C++14:把模板藏到 lambda 背后

    作者:everystep发布日期:2026-01-27 07:00:00

    那会儿还没有 lambda。STL 刚进大家的工具箱。你第一次用上 std::sort 的时候。真的会觉得它很爽。然后它就问你一句。“按什么规则排?”你以为这问题很简单。结果你在代码库里多了一个新文件

    阅读全文
  • 文章封面

    写进去什么,读出来就变样?std::quoted 专治不服

    作者:everystep发布日期:2026-01-27 07:00:00

    那会儿日志就是纯文本。也没人会说什么“结构化”。我们写日志。就是往文件里塞一行文本。然后靠 grep、awk、一点耐心。把问题捞出来。看起来粗糙。但真能救命。直到某一天。你想把“用户输入”也写进去。你

    阅读全文
  • 文章封面

    我只是想拼个字符串,C++ 怎么给我算了个地址?

    作者:everystep发布日期:2026-01-26 07:00:00

    那会儿还没有 C++14。很多人写 C++。说白了。就是在写 C。只是多了点 class。字符串也没变聪明。你眼里是“字符串”。它手里攥着的。常常只是一个地址。地址平时挺乖。你一拿它去做 +。它就开始

    阅读全文
  • 文章封面

    从 Boost 到标准库:::type 这套老传统怎么来的

    作者:everystep发布日期:2026-01-26 07:00:00

    那会儿 C++11 刚开始进项目。你第一次在代码里碰到 <type_traits>。不是在书上。是在发版前一晚。你本地一跑编译。它啪一下就挂了。报错里反复出现一个词。::type。你盯着它。像盯着一根

    阅读全文
  • 文章封面

    编译能过不代表命能活:C++11 lambda 的生命周期坑

    作者:everystep发布日期:2026-01-25 07:00:00

    那几年。C++11 刚出来。很多人第一次用上 lambda。感觉像突然不用再写那坨“函数对象”了。回调顺手。异步也顺手。大家写得很嗨。直到某天凌晨。线上啪一下。core dump。你第一反应是线程。第

    阅读全文
  • 文章封面

    别再数 0 了:C++14 让 1'000'000 一眼看懂

    作者:everystep发布日期:2026-01-25 07:00:00

    那会儿我们写 C/C++。配置常常就写在源码里。数字也就跟着一起写进去。一长串。一坨 0。你当时不会把它当风险。毕竟它“只是个常量”。直到有一天。你少写了一个 0。线上啪一下。服务开始挨打。你盯着那一

    阅读全文
下一页