主页

详解c++17 的 std::filesystem的核心功能与最佳实践

C++17引入的std::filesystem库为文件和目录操作提供了跨平台的标准解决方案,极大简化了文件系统操作的复杂性。本文详细介绍核心功能与使用技巧。 1. 基础概念 1.1 核心术语 // 关键概念 file // 可读写的数据对象,包含内容与属性 directory // 文件容器,包含其他文件的条目 path // 标识文件位置的元素序列,可包含根名称、根目录与文件名序列 1.2 路径类型 // 三种主要路径类型 absolute_path // 完整路径,无歧义标识文件位置(如"/home/user/file.txt") canonical_path // 不含符号链接、"."或".."元素的绝对路径 relati...

阅读更多

bazel 构建有什么特点

高效的增量构建:Bazel使用哈希算法对每个构建目标进行唯一标识,并跟踪每个目标的依赖关系。这使得在进行增量构建时,只有发生更改的目标及其依赖项会被重新构建,从而提高了构建速度。 多语言支持:Bazel支持多种编程语言,c++ python 声明式构建配置:Bazel使用BUILD文件来声明构建配置,这些文件描述了项目的结构、依赖关系和构建规则。通过声明式的配置,Bazel可以自动推断构建过程中的依赖关系,减少了手动配置的工作量。

阅读更多

时间同步技术全解析:从NTP到TSN

1. 时间同步基础概念 1.1 为什么需要时间同步 分布式系统协调 多媒体同步播放 工业控制精确timing 传感器数据融合 2. AVB 体系/协议框架 2.1 AVB 简介 http://blog.coderhuo.tech/2020/03/22/AVB_summury/ AVB被称为时间敏感网络,它主要解决两个问题 网络传输问题:带宽预留 多媒体同步问题:时钟恢复与播放同步 2.2 AVB协议族中的gPTP协议 AVB域内的每一个节点都是一个时钟,由以下两个角色组成: 一个主时钟(Grandmaster Clock),它是标准时间的来源; 其他的都是从时钟(Slave Clock),它们必须把自己的时间和主时钟调整一致 http...

阅读更多

C++函数设计最佳实践

参数顺序相关 函数的参数顺序为: input -> input/output -> output 函数参数不超过5个 两种情况可能导致参数过多: 函数功能过于庞大, 可以拆分成多个小函数,方便单元测试和代码调试 隐藏了一个潜在的类,包含了这些参数 c++函数的输出一般通过返回值 提供,有时候通过输出参数提供 倾向于使用返回值。可读性好,否则的话按照引用返回,避免返回指针,除非他可以为null 第一个方法 MakePizza(Pizza& pizza) 通过引用参数传递 pizza 对象,并返回一个布尔值来表示制作披萨的结果。如果 busy 为假,则将 pizza 对象的属性设置为指定的值,并返回 true 表示制作成功。否则,返回 f...

阅读更多

C++类设计最佳实践指南

构造函数的职责 不要再构造函数中调用虚函数,也不要在无法报出错误的时候进行可能失败的初始化 构造函数不应该调用虚函数,考虑一个工厂函数或者Init()方法 缺省实现的构造函数,操作符或者析构函数等,要用=default,或者=delete显式说明 =default 显式要求编译器生成函数的一个默认版本,对于构造函数而言(尤其是拷贝/移动构造函数中),可以减轻编码负担。 此外,使用=default还可以显示指定构造函数的权限,以及保持类的特性(如trivial、POD)。 隐式类型转换相关 不要定义隐式类型转换,对于转换运算符和单参数构造函数,用explict 关键字 不要提供隐式类型转换,可以用ToFloat() 等函数替代 隐式类型转换允许某一个类型的对象被用于另一...

阅读更多

c++ 作用域/命名空间相关最佳实践

命名空间相关 在.cc 文件内部使用匿名空间或者static声明 禁用 using namespace … 可以使用 using type alias 禁用 inline namespace 内联空间的名字可以被外部使用,和命名空间作用相违背 不要在头文件中定义空间别名 头文件中引入的namespace 都会成为公开api的一部分 src中,namespace 应该包裹住除了#include 宏定义和其他namespace中前置声明以外的所有代码 不要在std:: 空间声明任何东西,包括前置声明 做法的结果未被定义, 不好移植,要直接引用头文件 内部连接性相关 .cc 中定义一个不需要被外部引用的变量的时候,需要放在匿名空间或者static, 但.h 中不要这么...

阅读更多

C++头文件最佳实践指南:从自足性到包含顺序

头文件相关的c++ guide 头文件要Self-contained 头文件要能够自给自足,即 self contained, 头文件本身以来的其他头文件,需要全部包含 也就是说,需要保证 在包含该头文件后,出于易维护性考虑,可以不需要引入其它头文件,就可以保证编译通过 例如 // foo.h #ifndef FOO_H_ #define FOO_H_ // print_str 接口中的入参是 string 类型 // 所以要求在 这加上 头文件引用 #include <string> void print_str(const std::string& input); #endif // A_H_ 保证引用foo.h 的地方不用添加 #include...

阅读更多

C++三角函数优化实践-从std::atan2到NEON加速

性能分析 火焰图发现std::atan2 存在平顶 性能优化 cv::fastAsan2 函数替换 之前用的std::atan2 性能不理想,项目中已经有opencv库,查阅资料cv::fastAsan2 更快,具体参考 https://blog.csdn.net/u014629875/article/details/97817442 https://blog.csdn.net/lien0906/article/details/49587759 cv::fastAsan2 实现原理 核心实现: static const float atan2_p1 = 0.9997878412794807f*(float)(180/CV_PI); static const float ...

阅读更多