网站快照
a y h 的 博 客 _ 记 录 自 己 的 学 习 历 程 e c h o a y h ; e c h o a y h ; 首 页 t e s t 数 据 结 构 B / B + 树 h a s h , 布 隆 过 滤 器 红 黑 树 二 叉 树 操 作 系 统 e p o l l 线 程 设 计 模 式 创 建 型 设 计 模 式 结 构 型 设 计 模 式 C + + C + + P r i m e r C + + 新 特 性 C + + e f f e c t i v e 算 法 背 包 问 题 动 态 规 划 暴 力 枚 举 基 础 组 件 设 计 池 式 组 件 L i n u x 工 程 管 理 分 支 管 理 g i t t e s t 2 0 2 5 / 1 2 / 1 6 I t e m 3 5 – 考 虑 v i r t u a l 函 数 以 外 的 其 他 选 择 1 . 考 虑 虚 函 数 的 替 代 方 案 核 心 思 想 : 把 “ 做 什 么 ” 和 “ 怎 么 做 ” 分 开 传 统 的 v i r t u a l 函 数 把 “ 接 口 声 明 ” 和 “ 具 体 实 现 ” 都 绑 定 在 类 的 继 承 体 系 内 。
I t e m 3 5 建 议 我 们 跳 出 这 个 框 框 , 看 看 以 下 几 种 替 代 方 案 : 1 . N V I 手 法 ( N o n V i r t … C + + e f f e c t i v e 2 0 2 5 / 1 2 / 1 6 a y h 6 2 0 2 5 / 1 2 / 1 6 I t e m 3 4 – 区 分 接 口 继 承 和 实 现 继 承 这 个 I t e m 讨 论 的 是 纯 虚 函 数 、 非 纯 虚 函 数 ( 普 通 虚 函 数 ) 和 非 虚 函 数 在 设 计 意 图 上 的 巨 大 差 异 。
1 . 核 心 概 念 : 三 种 函 数 的 不 同 语 义 在 p u b l i c 继 承 体 系 下 , 基 类 的 成 员 函 数 代 表 了 三 种 不 同 的 继 承 契 约 : A . 纯 虚 函 数 ( P u r … C + + e f f e c t i v e 2 0 2 5 / 1 2 / 1 6 a y h 5 2 0 2 5 / 1 2 / 1 6 项 目 地 址 线 程 池 h t t p s : / / g i t h u b . c o m / b e l i f e 7 3 / t h r e a d P o o l . g i t 基 础 组 件 设 计 2 0 2 5 / 1 2 / 1 6 a y h 4 2 0 2 5 / 1 2 / 1 6 3 5 6 2 . 折 扣 价 交 易 股 票 的 最 大 利 润 3 5 6 2 . 折 扣 价 交 易 股 票 的 最 大 利 润 力 扣 ( L e e t C o d e ) c l a s s S o l u t i o n { p u b l i c : i n t m a x P r o f i t ( i n t n , v e c t o r c l a s s S o l u t i o n { p r i v a t e : / / … 线 段 树 2 0 2 5 / 1 2 / 1 5 a y h 2 2 0 2 5 / 1 2 / 1 5 I t e m 3 3 – 避 免 遮 掩 继 承 而 来 的 名 称 1 . 核 心 现 象 : 名 称 遮 掩 ( N a m e H i d i n g ) 一 句 话 总 结 : 在 C + + 中 , 子 类 中 的 名 称 会 遮 掩 ( H i d e ) 父 类 中 的 同 名 名 称 , 无 论 参 数 列 表 是 否 相 同 。
这 是 由 C + + 的 名 称 查 找 规 则 决 定 的 : 编 译 器 看 到 一 个 函 数 调 用 ( 如 d . m f 1 ( 5 ) ) … C + + e f f e c t i v e 2 0 2 5 / 1 2 / 1 5 a y h 1 0 2 0 2 5 / 1 2 / 1 5 I t e m 3 2 – 确 定 你 的 p u b l i c 继 承 塑 模 出 i s a 关 系 核 心 原 则 I t e m 3 2 的 金 句 : P u b l i c I n h e r i t a n c e m e a n s i s a ( 公 有 继 承 意 味 着 “ 是 一 个 ” ) . 它 的 严 格 定 义 是 : 如 果 类 D ( D e r i v e d ) 公 有 继 承 自 类 B ( B a s e ) , 那 么 每 一 个 类 型 为 D 的 对 象 同 时 也 是 一 个 类 型 为 B 的 对 象 。
… C + + e f f e c t i v e 2 0 2 5 / 1 2 / 1 5 a y h 1 2 0 2 5 / 1 2 / 1 5 I t e m 3 1 – 将 文 件 间 的 编 译 依 存 关 系 降 至 最 低 核 心 痛 点 : 编 译 级 联 ( C o m p i l a t i o n C a s c a d e s ) 在 C + + 中 , 如 果 头 文 件 A . h # i n c l u d e 了 头 文 件 B . h , 那 么 所 有 包 含 了 A . h 的 源 文 件 , 实 际 上 也 间 接 依 赖 了 B . h 。
如 果 B . h 发 生 了 一 丁 点 修 改 ( 哪 怕 只 是 加 了 一 个 p r i v a t e 成 … C + + e f f e c t i v e 2 0 2 5 / 1 2 / 1 5 a y h 3 2 0 2 5 / 1 2 / 1 5 I t e m 3 0 – 透 彻 了 解 i n l i n i n g 的 里 里 外 外 1 . I n l i n i n g 的 本 质 : 以 空 间 换 时 间 i n l i n e 函 数 背 后 的 思 想 是 : 将 “ 函 数 调 用 ” 替 换 为 “ 函 数 本 体 代 码 ” 。
优 点 ( 时 间 收 益 ) : 省 去 了 函 数 调 用 的 开 销 ( 压 栈 、 跳 转 、 返 回 、 参 数 传 递 ) 。
对 于 短 小 的 函 数 , 这 些 开 销 占 比 很 大 。
… C + + e f f e c t i v e 2 0 2 5 / 1 2 / 1 5 a y h 6 2 0 2 5 / 1 2 / 1 5 I t e m 2 9 – 为 “ 异 常 安 全 ” 而 努 力 是 值 得 的 1 . 灾 难 现 场 : 一 个 “ 不 安 全 ” 的 函 数 假 设 我 们 要 在 多 线 程 环 境 下 更 换 一 个 G U I 菜 单 的 背 景 图 片 : c l a s s P r e t t y M e n u { p u b l i c : v o i d c h a n g e B a c k g r o u n d ( s t d : : i s t r e a m … C + + e f f e c t i v e 2 0 2 5 / 1 2 / 1 5 a y h 3 2 0 2 5 / 1 2 / 1 5 I t e m 2 8 – 避 免 返 回 h a n d l e s 指 向 对 象 内 部 成 分 1 . 什 么 是 H a n d l e ? 在 这 里 , H a n d l e ( 句 柄 ) 是 一 个 广 义 的 概 念 , 不 仅 仅 指 W i n d o w s A P I 中 的 H A N D L E 。
任 何 能 够 让 你 直 接 访 问 对 象 内 部 数 据 的 媒 介 , 都 叫 H a n d l e 。
在 C + + 中 , 主 要 指 这 三 样 东 西 : 指 针 ( P o i n t e r s ) 引 … C + + e f f e c t i v e 2 0 2 5 / 1 2 / 1 5 a y h 7 2 0 2 5 / 1 2 / 1 5 I t e m 2 7 – 尽 量 少 做 转 型 动 作 1 . 语 法 选 择 : 抛 弃 C 风 格 , 拥 抱 C + + 风 格 C 语 言 的 旧 式 转 型 ( C s t y l e c a s t s ) 长 这 样 : ( T ) e x p r e s s i o n / / C 风 格 T ( e x p r e s s i o n ) / / 函 数 风 格 S c o t t M e y e r s 强 烈 建 议 不 再 使 用 上 述 旧 式 转 型 , 而 是 使 用 C + + 的 新 式 转 … C + + e f f e c t i v e 2 0 2 5 / 1 2 / 1 5 a y h 7 1 2 3 4 5 > > > [ 8 ] 全 站 搜 索 栏 目 分 类 前 端 技 术 4 4 0 8 操 作 系 统 知 识 2 B / B + 树 1 C + + 1 C + + e f f e c t i v e 3 4 C + + P r i m e r 5 C + + 新 特 性 1 2 e p o l l 1 g i t 2 h a s h , 布 隆 过 滤 器 1 L i n u x 工 程 管 理 3 二 叉 树 4 分 支 管 理 0 创 建 型 设 计 模 式 1 0 动 态 规 划 1 基 础 组 件 设 计 1 操 作 系 统 0 数 据 结 构 6 暴 力 2 枚 举 2 池 式 组 件 1 算 法 0 红 黑 树 1 线 段 树 1 线 程 1 背 包 问 题 2 设 计 模 式 0 归 档 2 0 2 5 年 1 2 月 ( 9 2 ) 最 新 文 章 1 I t e m 3 5 – 考 虑 v i r t u a l 函 数 . . . 2 I t e m 3 4 – 区 分 接 口 继 承 和 实 . . . 3 项 目 地 址 4 3 5 6 2 . 折 扣 价 交 易 股 票 的 最 大 利 润 5 3 7 7 7 . 使 子 字 符 串 变 交 替 的 最 少 删 . . . 6 I t e m 3 3 – 避 免 遮 掩 继 承 而 来 . . . 7 I t e m 3 2 – 确 定 你 的 p u b l i c . . . 8 I t e m 3 1 – 将 文 件 间 的 编 译 依 . . . 9 I t e m 3 0 – 透 彻 了 解 i n l i n i n g . . . 1 0 I t e m 2 9 – 为 “ 异 常 安 全 ” 而 努 . . . 标 签 云 # 红 黑 树 # B / B + + T r e e # h a s h # 布 隆 过 滤 器 # t h r e a d # 结 构 型 设 计 模 式 友 人 帐 | 关 于 | 申 明 | 请 在 设 置 底 部 更 改 备 案 号 0 0 0 0 0 0 0 1 秋 天 不 回 来 C o p y r i g h t © a y h 的 博 客 P o w e r e d W o r d P r e s s T h e m e Q z d y