c++
-
C++中的std::packaged_task是什么?C++异步任务封装详解【并发编程】
std::packaged_task是C++11引入的单次执行可调用对象包装器,封装函数并关联std::future以解耦执行与结果获取;需先调用get_future()再执行task,仅可移动不可拷贝,异常自动捕获至future。 std::packaged_task 是 C++11 引入的一个可…
-
C++如何使用std::function和std::bind?(函数包装)
std::function 是 C++11 引入的通用函数包装器,可存储、复制和调用任意匹配签名的可调用对象(如函数、lambda、bind 表达式),支持类型安全回调与策略模式。 std::function 和 std::bind 是 C++11 引入的函数对象包装工具,用来统一处理各种可调用对象…
-
c++中的模板元编程入门_c++编译期计算与技巧【高级】
模板元编程(TMP)是C++在编译期利用模板进行计算和类型推导的技术,依赖模板特化、递归实例化、SFINAE及constexpr等特性,用于零开销抽象与强约束接口。 模板元编程(TMP)是 C++ 在编译期利用模板机制进行计算和类型推导的技术,它不生成运行时代码,而是在编译阶段完成逻辑判断、数值计算…
-
C++中的type traits是什么?C++模板元编程类型判断技巧【高级模板】
type traits 是 C++ 编译期类型查询与变换工具,属模板元编程基石,支撑 SFINAE、constexpr if 和 Concepts;提供约 100 个标准 trait,用于判断(如 is_pointer_v)、转换(如 decay_t)及自定义探测,C++14 起推荐变量模板形式,C…
-
C++如何获取当前工作目录_C++ getcwd与filesystem current_path对比
推荐使用std::filesystem::current_path。它安全、跨平台、易用,支持现代C++字符串操作;而getcwd需手动管理缓冲区,易出错,适用于旧项目或C++17以下环境。 在C++中获取当前工作目录,常用的方法有两种:传统的getcwd函数和C++17引入的std::filesy…
-
c++20的三路比较运算符(spaceship)详解_c++与简化代码
三路比较运算符通过一个操作定义所有比较,编译器自动生成==、!=、=,减少代码重复并避免逻辑不一致,支持std::strong_ordering等类型,可结合手动==优化性能。 <img src="https://img.php.cn/upload/article/001/431/6…
-
C++的Undefined Behavior Sanitizer是什么_使用UBSan检测C++中的未定义行为
UBSan是C++中用于检测未定义行为的工具,通过编译选项-fsanitize=undefined启用,可捕获整数溢出、除零、空指针解引用等问题,帮助开发者在测试阶段发现潜在错误,建议结合ASan、TSan用于CI流程,提升代码可靠性。 Undefined Behavior Sanitizer(简称…
-
C++中的enum和enum class有什么区别?C++强类型枚举使用教程【代码安全】
enum class 通过作用域隔离、类型安全和底层类型控制改进传统 enum:枚举值限定在类作用域内,避免命名冲突;禁止隐式整型转换,需显式转换;支持指定底层类型。 主要区别在作用域、类型安全和底层类型控制三方面。enum class 是 C++11 引入的改进方案,解决传统 enum 的命名污染…
-
c++如何使用LLVM/Clang LibTooling_c++编写自己的静态分析工具【高级】
c++kquote>用LLVM/Clang LibTooling编写C++静态分析工具的核心是在AST层做语义检查,需从源码构建环境、用MatchFinder+ast_matchers定义规则、结合类型/控制流获取语义信息,并集成compile_commands.json与IDE友好输出。 用…
-
c++如何编写一个跨平台的构建脚本_c++ CMake高级技巧与实践
掌握CMake高级技巧可实现C++项目跨平台一键构建:通过统一C++标准、条件链接库、动态收集源文件确保多平台一致性;利用find_package、FetchContent和自定义Find模块优雅集成外部依赖;结合add_custom_command与configure_file生成代码和资源;使用…