C++ facility bench / chapter 17

设施选择与追踪器

同一种“数据处理”,可能需要值语义、固定宽度位集合或文本模式。先观察语义,再选设施;接口名字相近,边界却不同。

TUPLE

结构化绑定:副本、别名与只读视图

切换声明形式,修改绑定中的分数,观察原 tuple 是否被回写。

值绑定:创建独立副本 修改绑定只改变副本,原 tuple 保持不变。

record / 原对象

nameLin
score80

binding / 绑定名

nameLin
score80

设施边界:tuple 适合临时组合和通用接口;当字段具有长期业务含义时,用带字段名和不变量的 struct,维护成本通常更低。

BITSET<8>

固定八位:显示顺序不等于索引方向

字符串从位 7 写到位 0;索引 0 永远在最右侧。

最高位 bit 7 ←→ 最低位 bit 0
test(0)true
count()4
any()true
all()false
none()false
REGEX

API 选择:结果范围决定接口

match 看整串,search 找首个,迭代器收集全部非重叠结果。

regex_match / 必须覆盖整串0 个结果
二阶段检查
  1. 形状检查:正则只回答文本是否符合模式。
  2. 业务语义检查:例如 2025-99-45 形状像日期,但月份和日期无效。
教学模拟范围:此页使用浏览器 JavaScript 的正则引擎模拟接口范围与捕获组。它与 C++ std::regex 的 ECMAScript 语法有共同基础,但转义、特性支持和边界行为可能不同;生产代码应以目标编译器与标准库实测为准。