c++ - int8_t 与 char ;哪个是最好的?

标签 c++ c char

我知道两者都是不同的类型(signed charchar),但是我公司的编码指南指定使用 int8_t 而不是 char.

所以,我想知道,为什么我必须使用 int8_t 而不是 char 类型。有没有使用 int8_t 的最佳实践?

最佳答案

int8_t 的使用在某些情况下非常好 - 特别是当类型用于需要有符号 8 位值的计算时。涉及严格大小数据的计算[例如由外部要求定义为在结果中精确为 8 位](我在上面的评论中使用了像素颜色级别,但这实际上是 uint8_t,因为负像素颜色通常不存在 - 除了也许在 YUV 类型的色彩空间中)。

int8_t 类型不应用作字符串中 char 的替代品。这可能导致编译器错误(或警告,但我们也不想处理来自编译器的警告)。例如:

int8_t *x = "Hello, World!\n";

printf(x);

可能在编译器 A 上编译得很好,但在编译器 B 上混合有符号和无符号 char 值时会给出错误或警告。或者如果 int8_t 甚至没有使用 char 类型。这就像期待

int *ptr = "Foo";

在现代编译器中编译...

换句话说,如果您使用 8 位数据进行计算,则应该使用 int8_t 而不是 char。将所有 char 全部替换为 int8_t 是不正确的,因为它们远不能保证相同。

如果需要对字符串/文本/等使用char,并且由于某种原因char 过于模糊(可以有符号或无符号等) , 然后使用 typedef char mychar; 或类似的东西。 (有可能找到比 mychar 更好的名字!)

编辑:我应该指出,无论你是否同意这一点,我认为简单地走到公司负责这一“原则”的任何人面前,指着关于 SO 和说“我认为你错了”。尝试了解动机是什么。它可能比看起来更多。

关于c++ - int8_t 与 char ;哪个是最好的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17744226/

相关文章:

c - 同类指针的区别

c - OpenCV视频采集和fps问题

c - 将 int 转为 char C

使用抽象接口(interface)的 C++ 编译器独立 DLL

C++:使用指向派生类的指针进行虚函数调用仍然有一个vlookup

objective-c - 将 UnsafeMutablePointer 传递给函数时出错

c++ - 将 Int 转换为 Char 数组

c++ - 将 ip 保存在转换列表中

c++ - 如何使用抽象类指针避免内存泄漏

c++ - 使用 boost Spirit 解析为 STL vector