C++编程规范:避免有符号与无符号转换及类型安全

需积分: 50 99 下载量 199 浏览量 更新于2024-08-07 收藏 980KB PDF 举报
"C++语言编程规范内部公开2012-03-19" 本文档是华为技术有限公司内部的C++编程规范,旨在提高代码质量和可移植性。以下是规范中涉及的重要知识点: 建议12.5 避免无符号数与有符号数的转换: 在C++中,无符号数与有符号数之间的转换可能导致不一致的行为,因为不同的编译器可能有不同的处理方式。例如,当将一个`unsigned short`赋值给`long`时,不同编译器可能填充0或1到高位。为了避免潜在的问题,应尽量避免这种转换,特别是涉及不同长度数值类型的情况。推荐的做法是明确指定类型,如将`long lNum`更改为`unsigned long ulNum`。 建议12.6 创建64位常量时使用LL或ULL后缀: 在表示64位整数常量时,使用`LL`(long long)或`ULL`(unsigned long long)后缀可以明确指定类型,提高代码可读性。同时,要注意无符号与有符号整数在进行右移操作`>>`时的区别,无符号数会填充0,而有符号数可能会填充符号位。 建议12.7 区分`sizeof(void *)`和`sizeof(int)`: 在32位和64位系统中,`void *`指针的大小可能与`int`不同。为确保代码在不同架构上的正确性,应使用`intptr_t`来表示与指针大小相匹配的整数类型,而不是假设`int`的大小。 建议12.8 编译器、操作系统相关的代码独立出来: 为了提高代码的可移植性,应将特定于编译器或操作系统的代码抽象出来,封装为宏或函数。这样可以降低对特定平台的依赖,使得代码更易于在多个平台上运行。 这些规范强调了良好的编程习惯,包括类型安全、代码可读性和可移植性。遵循这些规范能够帮助开发者编写出更健壮、更易维护的C++代码。