当前位置: 首页 > news >正文

滥用static inline

结论先行

  • 你现在的写法
    namespace hzi {static inline Config config;   // ← 注意 static
    }
    
    会让每个包含 config.hpp 的 .cpp 文件都拥有自己独立的一份 config 对象
    因此:
    – 它们在内存中地址不同
    – 在一个 .cpp 里修改 hzi::config.xxx 对另一个 .cpp 不可见
    – 如果程序逻辑依赖“全局唯一配置”,那么确实属于 bug

为什么看起来“能跑”

  1. 很多变量只是读取,还没做跨翻译单元的写入-读取,所以没立刻暴露。
  2. 或者目前只有一个 .cpp 真正用了这份配置,其它 .cpp 还没开始用。
  3. 一旦两个 .cpp 都写同一份配置,就会观察到“修改不生效”。

怎么验证
在 a.cpp 和 b.cpp 分别打印

std::cout << &hzi::config << std::endl;

地址不同 ⇒ 100 % 确认不是同一个对象。


正确改法(C++17 及以上)
config.hpp

namespace hzi {inline Config config;   // 去掉 static,保持 inline
}
  • inline 允许头文件定义,链接器会合并成唯一一份实例
  • 每个 .cpp 仍然通过 hzi::config.xxx 访问,但地址相同数据共享

如果编译器较老(C++14 及以下)
头文件只放声明:

// config.hpp
namespace hzi {extern Config config;   // 仅声明
}

在某个 .cpp(例如 config.cpp)里给出唯一定义:

// config.cpp
#include "config.hpp"
hzihzi::Config config;      // 唯一对象

其余 .cpp 继续 #include "config.hpp" 后使用 hzi::config 即可。


一句话总结
你现在用的 static inline Config config 会制造多份副本
要么改用 “inline 无 static”(C++17),要么改用 “extern 声明 + 单 cpp 定义”(旧标准),才能真正实现全程序共享的单一配置实例

http://icebutterfly214.com/news/284/

相关文章:

  • 11-文件上传
  • TensorFlow与PyTorch深度对比分析:从基础原理到实战选择的完整指南 - 指南
  • Navicat 17 超详细保姆级下载安装教程:附激活工具使用步骤​
  • el-date-picker样式修改
  • 浅谈 Agent 开发工具链演进历程
  • 电梯调度算法结对编程作业
  • 2025质量可靠的义乌刺绣工厂推荐榜
  • DP1312多协议高性能读卡芯片支持A/B/Felaca/18092智能门锁读卡器模拟卡兼容PN512 - 动能世纪
  • 2025年10月兰花油品牌推荐榜单:多维度深度对比与选择指南
  • 2025 年1KV 冷缩硅橡胶电缆附件,冷热缩电缆附件,绕包电缆附件,熔接电缆附件厂家最新推荐,产能、专利、环保三维数据透视
  • 低代码开发便捷的技术深度解析
  • 2025年浅拾兰花双萃致臻精华油:从成分与科技维度解析其护肤功效
  • 销售公司绩效考核全攻略:维度、原则与数字化赋能方案
  • 题解:P4434 [COCI 2017/2018 #2] ​​Usmjeri
  • 小程序-跳转到公众号
  • 如何解决一堆向量的问题?10、Self-attention - -一叶知秋
  • 洞悉过往,一目了然:浅述视频融合平台EasyCVR如何实现海量视频录像的智能检索与高效回看
  • 2025年国内外五款AI编程工具深入对比与推荐排行
  • CSPS 前后的话
  • 2025 年 10 月云仓 ERP,云仓 saas 系统,云仓代发系统公司最新推荐,技术实力与市场口碑深度解析
  • iOS混淆实战用多工具组合把IPA加固做成可复用的工程能力(iOS混淆 IPA加固 无源码混淆
  • cyclonessd ROS2 lidar topic 数据丢帧 系统配置
  • 2025 年 10 月 WMS 系统,WMS 软件,wms 仓储管理系统公司最新推荐,聚焦资质、案例、售后的优质机构深度解读
  • Go语言测试全攻略:从单元测试到模糊测试
  • 2025 年 10 月进销存 erp,供应链 erp,零售 ERP 公司最新推荐,聚焦资质、案例、售后的五家机构深度解读!