C++
std::is_invocable只依据类型判断调用可行性,不关心实参值,需提供类型名或decltype表达式。检查引用和常量与易变限定需配合std::declval生成引用。返回类型和异常检查应分开,std::is_invocable_r不保证noexcept,需另用无抛出检查。与std::invoke组合可先检查后调用,确保安全,避免运行错误。
直接使用`==`比较double不可靠,因十进制小数无法精确存储。应使用绝对或相对误差阈值判断,并处理NaN。避免将浮点数作为哈希键或循环变量,金融场景建议用整数(如分)存储,防止精度损失。
C++20的std::source_location通过显式调用current()方法,能够可靠地获取函数名与行号信息,相比依赖__func__等宏更加可靠。旧标准使用__func__等预定义宏,但存在不能取地址、宏展开时返回定义处函数名等陷阱,使用时需注意编译器版本。推荐使用C++20新特性,规避宏陷阱。
C++中浮点数转字节数组,指针强转(如`reinterpret_cast`)存在未定义行为,编译器优化可能导致错误结果;`memcpy`是安全可靠的跨平台方案,不触发严格别名规则,适合序列化、二进制写入等场景,需注意对齐和大小端处理。
使用z_stream解压内存数据需手动管理缓冲区与状态:先清零结构体,正确设置窗口位宽参数,然后循环调用inflate()函数直至返回Z_STREAM_END,期间动态扩容输出缓冲区,最后调用inflateEnd()清理,否则容易导致崩溃或数据不完整。
关于懒汉模式,其实核心就一句话:"用到的时候才创建"。但偏偏这句看似简单的需求,在C++里实现起来有挺多坑。很多人第一反应就是裸指针加个if判断,结果多线程一跑,直接炸出未定义行为——因为构造可能被执行多次,而指针赋值又不是原子的。 怎么解决?C++11给出的标准答案是std::once_flag
absl::FunctionRef是轻量级、非拥有式的函数引用,大小固定16字节,避免std::function的堆分配与虚函数开销。适合高频回调等性能敏感场景,但不支持长期持有或跨作用域存储。C++26标准尚未纳入std::function_ref,需注意命名空间与生命周期管理。
C++标准库不支持直接读写单个位,需以binary|in|out模式打开文件,先读字节,修改特定位再写回。位索引对应字节索引=位索引/8,位偏移=位索引%8,置1掩码为1U左移位偏移量,置0掩码为其取反。
C++17的std::variant是带标签的联合体,解决传统union无类型记录和无法管理复杂类型的问题。它编译期锁定类型列表,运行时自动记录活跃类型。配合std::get、std::holds_alternative和std::visit安全访问,推荐使用std::visit处理所有分支,避免裸用std::get导致异常。
C++23的std::to_underlying是一个constexpr函数模板,用于将枚举值安全地转换为底层整数类型。使用时必须传入枚举值而非枚举类型,不进行范围检查,与static_cast等价。无法用于前向声明的枚举。与std::underlying_type_t分工明确,前者处理值,后者处理类型。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。






