为什么无符号整数不符合CLS?
我开始认为类型规范只是为了性能而不是为了正确性.
在我的代码中,我不使用int或unsigned int.我只使用size_t或ssize_t进行移植.例如:
typedef size_t intc; // (instead of unsigned int)
typedef ssize_t uintc; // (instead of int)
Run Code Online (Sandbox Code Playgroud)
因为strlen,string,vector...全部使用size_t,所以我通常使用size_t.我只会ssize_t在它可能是负面时使用.
但我发现:
无符号整数类型非常适合将存储视为位数组的用途.使用无符号而不是int来再获得一位来表示正整数几乎不是一个好主意.通过声明无符号变量来确保某些值为正的尝试通常会被隐式转换规则所取代.
在"C++编程语言 "一书中.
所以我很困惑.我错了吗?为什么STL不遵守书中的建议?
它背后有一个原因.NET Framework不使用无符号数据类型吗?
我不应该在我的代码中采用它们,但是例如,List <> 的Count属性是一个int.你不能有负数,所以为什么不把它定义为uint?即使我知道计数不能为负,我应该只使用int吗?
在32位系统上.
std::vector<char>::max_size()返回2 32 -1,大小为char-1字节std::vector<int>::max_size()返回2 30 -1,大小为int-4字节std::vector<double>::max_size()返回2 29 -1,大小为double- 8字节任何人都可以告诉我max_size()取决于什么?
max_size()如果它在64位系统上运行,它的返回值是多少?