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

    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。线上啪一下。服务开始挨打。你盯着那一

    阅读全文
  • 文章封面

    三四个返回值的时候,我一般怎么写

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

    你想“从函数里带回两个东西”。没有神兵利器。只有手工活。有人用引用。有人用指针。有人写一堆小结构体。还有人……开始写宏。你没听错。为了多返回值。真的有人写宏。当年没有 tuple 的日子那会儿还在 C

    阅读全文
  • 文章封面

    当年我们怎么写“任意参数”:以及 C++11 怎么把它变得靠谱

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

    那会儿还没有 C++11。我们写的东西更像 “C with classes”。也就是在 C 上面糊一层 class。项目不大。但麻烦一点都不少。尤其是日志。你总想写一个函数。什么都能塞进去。参数多少都

    阅读全文
  • 文章封面

    别急着上正则:从历史到 std::regex 的几个关键点

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

    很久以前。C++ 里想“用正则”,并不是一句 #include 就完事。你要么去翻 POSIX 的 regex.h。要么拉个 PCRE。要么用 Boost。然后开始跟编译选项、链接、版本兼容吵架。最尴

    阅读全文
  • 文章封面

    随机这事,别再靠 rand() 碰运气

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

    很久以前。你写 C。你想要“随机”。你只有一个按钮。rand()。它来自 C 标准库。一开始也没打算让你拿它写抽奖、分流、风控。更多时候。是小游戏。是模拟。是“差不多就行”。然后我们就真的把它当成“随

    阅读全文
  • 文章封面

    std::function 到底解决了什么问题

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

    你写个小项目。代码不多。需求也不复杂。直到它上线。然后某天晚上。线上啪一下。你盯着日志发呆。崩在一个“回调”。你甚至没觉得自己写了什么高深东西。你只是。“想把一个能调用的东西传进去”。那些年,回调是怎

    阅读全文
  • 文章封面

    unordered_map / unordered_set:当年没得选时,我们怎么做

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

    那会儿你想要一张“用 key 快速查值”的表。标准库不给。只给你 std::map。要么你自己写一个。要么去翻各家编译器的私货。今天在你机器上能跑。明天换个编译器就报错。更惨的是。同事一更新工具链。线

    阅读全文
  • 文章封面

    智能指针这件事:从 new/delete 的坑里慢慢爬出来

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

    那会儿还没什么“智能指针”。你写的就是 C with classes。能跑就行。能上线就更行。资源这件事。基本靠自觉。new 之后。你得自己去把 delete 找回来。找不回来。就等着哪天线上给你脸色

    阅读全文
  • 文章封面

    为什么不要用 system_clock 计时:chrono 的一个老坑

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

    时间这东西。最喜欢伪装成“一个数字”。你看着它。觉得没啥。然后线上啪一下。很久以前。我们还没有那种“把单位写进类型里”的安全感。也没有一个统一的时间工具箱。时间就是 int。单位靠约定。约定靠注释。注

    阅读全文
  • 文章封面

    从“长度丢了”到“长度写进类型”:std::array 的来路

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

    如果你写过一点 C。你大概率相信过一句话。数组的长度。就在那对 [] 里。写着呢。不会丢。结果第一次做小项目上了线。啪。你会发现。长度不是“丢了”。是你从来没真正拥有过它。那是很早的年代。大家写的不是

    阅读全文
  • 文章封面

    future / promise / async:少写一点并发的土协议

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

    那会儿还没有 C++11。也没有 std::thread。更别提 std::async。你想并发。就去写 pthread。或者上 Boost。然后把“结果”塞回主线程。靠全局变量。靠输出参数。靠一堆锁

    阅读全文
  • 文章封面

    完美转发:不是技巧,是别自作主张

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

    在 C++11 之前。写 C++ 很像写 C。只不过多了个 class。那会儿没有 std::move。也没有右值引用这种东西。你想把一个对象传给别人。通常就一个动作。拷贝。对只写过 C 的人来说。拷

    阅读全文
  • 文章封面

    从 Boost 到 C++11:type traits 这套“类型体检”怎么来的

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

    我想先把时间拨回去。拨回到一个更野的年代。那会儿你也写模板。也会写一个 T。然后你盯着它发呆。这玩意到底是不是整数。能不能拷贝。是不是引用。是不是我想要的那个类型。你问得很认真。但编译器只回你一句。“

    阅读全文
  • 文章封面

    C# 强制你写 override,C++ 为什么不?答案比你想的现实

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

    那会儿还没有这些“把意图写进语法”的小工具。大家写的还是 C with classes。写着写着。项目就长大了。然后线上啪一下。你才发现。最贵的不是崩溃。是“它居然没按我想的跑”。那些年,覆写靠的是记

    阅读全文
  • 文章封面

    以前我们用宏、enum、模板在“凑合”;C++11 终于给了一个像话的办法

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

    那会儿你写一个“常量”。多半就是一行 #define。写上去。编译过。就当它永远不会变。直到有一天。它变了。而你是在凌晨两点才知道的。一个小项目,线上啪一下当年我们做过那种“小得不能再小”的服务。一个

    阅读全文
上一页下一页