C ++有fixed width integer types,可以保证我获得一定的宽度,与我使用的编译器无关(当然它必须支持正确的C ++版本)。 我想知道C#是否有类似的东西,但我唯一能找到的是this page。如果Microsoft决定ushort将不再是System.Uint16,而是其他什么呢? 这是否已被考虑过?因为我找不到关于这个主题的任何内容。
答案 0 :(得分:4)
在这方面,C ++和C#的起点非常不同。
C ++以C开头,带有一些额外的功能,因此在这方面(这些额外的功能并不直接相关),它的出发点是C的起点。 C的设计始于1969年,当时一般使用的硬件涵盖了广泛的字节/字符和字大小(因为它们在许多领域仍然存在)。没有固定大小的类型作为默认值对C(以及后来的C ++)用户非常有用。因为他们越来越需要能够推断出类型的大小,然后添加了固定大小的typedef。
C#开始在桌面和服务器环境中使用,其中一个字节总是一个八位字节,一个字符永远不会被假定为与一个字节相同,并且自然字大小始终是也支持32位,64位算术或64位,32位也支持(它还要求提供一定程度的COM兼容性,并且需要某些大小的类型)。当匹配自然单词大小时,相对很少使用的IntPtr
和更少使用的UIntPtr
填补了另一个方向的空白。
它也不像C那样受到各种机器架构的束缚,而是绑定到单个虚拟机架构,即公共语言基础架构描述的基于堆栈的虚拟机。如果C#实现针对的体系结构与开发时的心态完全不同,那么仍然可以通过生成CLI实现来实现,并且可以弥补差距。
虽然两者都从其起点扩散到其他用途,但两者都带有不同来源的遗产。 C#的类型并不仅仅是固定宽度,但根据定义它们是固定宽度的。
当然,从现在开始几十年,可能会有某种压力需要改变,但是假设至少有一条升级路径可以解决未来C#的问题,这是合理的。