目录标题
- 类型安全
- 11.类型安全规范
-
- 11.1 类型转换规范
- 11.2 类型推导规范
- 11.3 类型约束
- 11.4 指针和资源管理
- 11.5 函数参数和返回类型
-
- 11.5.1 \[必须] 函数参数尽量使用`const`引用传递,以避免不必要的拷贝
- 11.5.2 \[建议] 在函数返回类型中使用`const`引用来避免不必要的拷贝
- 11.5.3 \[必须] 使用`nullptr`而不是`NULL`或`0`来表示空指针
- 11.5.4 \[建议] 使用`noexcept`指示函数不抛出异常
- 11.5.5 \[建议] 在多态基类的虚函数中适当使用协变返回类型
- 11.5.6 \[建议] 在函数中使用`std::optional`作为返回类型,以明确返回值的可选性
- 11.5.7 \[建议] 在函数中优先使用强类型枚举(`enum class`)作为参数和返回类型
- 11.5.8 \[建议] 使用`[[nodiscard]]`属性来标记应被检查的返回值
- 11.5.9 \[建议] 在处理多态返回类型时合理选择返回方式
- 11.5.10 \[建议] 在返回容器时优先考虑使用`std::vector`或`std::array`
- 11.5.11 \[必须] 避免在函数参数中使用输出参数,优先考虑返回值或结构体
- 结语
规范参考总结了Qt、微软、谷歌和AUTOSAR C++14 等规范。
类型安全
11.类型安全规范
11.1 类型转换规范
11.1.1 [必须] 避免C风格的强制类型转换,使用C++ 显式类型转换来确保代码的安全性
- 在进行类型转换时,应尽量避免隐式类型转换,特别是可能导致数据丢失或未定义行为的情况。显式类型转换不仅可以使代码更易读,还可以明确转换的意图,减少潜在的错误。
- C风格的强制类型转换可能会掩盖潜在的类型问题,并且容易引发未定义行为。因此,应该使用C++标准库提供的
static_cast
、dynamic_cast
、const_cast
和reinterpret_cast
等类型转换方式。 - 应使用静态分析工具检查代码中的隐式转换,并确保所有转换都符合安全要求。
示例:
- 使用显式转换:
int value = static_cast<int>(doubleValu