我应该使用size_t还是ssize_t ?
Should I use size_t or ssize_t?
在我的代码中,我没有使用int或unsigned int。我只使用size_t或ssize_t用于可移植。例如:
typedef size_t intc; // (instead of unsigned int)
typedef ssize_t uintc; // (instead of int)
因为strlen
, string
, vector
…都用size_t
,所以我通常用size_t
。我只使用ssize_t
当它可能是负的。
但是我发现:
unsigned integer类型对于将存储视为位数组的应用来说是理想的。使用unsigned而不是int来多获得一位来表示正整数几乎从来都不是一个好主意。通过声明变量unsigned来确保某些值为正的尝试通常会被隐式转换规则打败。
在《c++编程语言》一书中
所以我很困惑。我错了吗?为什么STL不遵守书上的建议?
ssize_t
用于函数的返回值可以是有效的大小,也可以是表示错误的负值。它保证能够存储至少在[-1, SSIZE_MAX]
范围内的值(SSIZE_MAX
是与系统相关的)。
所以当你想返回一个字节大小时,你应该使用size_t
,当你想返回一个字节大小或一个(负的)错误值时,你应该使用ssize_t
。
看:http://pubs.opengroup.org/onlinepubs/007908775/xsh/systypes.h.html
ssize_t
不包含在标准中,并且不可移植。在处理对象的大小时应该使用size_t
(也有ptrdiff_t
,用于指针的差异)。
相关文章:
- enum是C++中的宏变量还是整数变量
- 如果我只是不访问queue_front节点的子节点,而是将它们推到队列中呢?还是BFS吗
- 在命名空间中定义函数还是限定函数
- 架构决策:返回std::future还是提供回调
- 这个指针和内存代码打印是什么?我不知道是打印垃圾还是如何打印我需要的值
- 异常属于C++中的线程还是进程
- 在决定是通过参考还是通过价值时,尺寸真的是一个问题吗
- 如何在C++中确定文本文件中的元素是字符还是数字
- 返回值优化:显式移动还是隐式
- 是什么原因导致它无法编译?它是声明签名还是在函数本身的实现中
- 为什么需要知道一个类是平凡的还是有平凡的构造函数
- 强枚举类型定义:Clang Bug 还是 C++11 标准不确定性?
- 'string.assign(string.data(), 5)' 是明确定义的还是 UB?
- 在哪里放置我的函数?进入我的母语 Gui 还是进入我的演示者?
- 在这种情况下,我真的复制了字节还是复制了字符?
- node-gyp 的先有鸡还是先有蛋的问题:指向依赖项中的头文件
- CIN是逻辑1还是0?
- i++还是++i更适合这个程序?
- 我应该将外部标头放在 .h 文件还是.cpp文件中?
- 这个失败的测试是将零添加到空指针未定义的行为、编译器错误还是其他什么?