每次我使用 unsigned
关键字时,它都会出现在 int
或其他内置类型之前。 我想知道是否还有其他方法可以使用 unsigned
。
- 用户定义的类型(类/结构)可以使用
unsigned
关键字吗? - 模板可以与
unsigned
一起特殊使用吗?
如果没有,为什么它有自己的关键字?为什么 unsigned int
不是 uint
?
最佳答案
主要问题已经多次回答:unsigned
关键字只能用作整数类型的类型说明符。
至于为什么 unsigned
是一个单独的关键字,而不是一个 uint
关键字,其原因是历史性的。
C 的最早版本(K&R 之前)只有四种基本类型:
char
(8 位,有符号,2 的补码)int
(16 位,有符号,2 的补码)float
(32 位)double
(64 位,与float
范围相同,但精度更高)
注意缺少的内容:没有 signed
或 unsigned
关键字,没有 short
、long
或 长双
;所有这些都是后来添加的。 (需要无符号算术的程序员常用指针,可以与int
自由互换。)
每个基本类型都有一个名称,该名称是一个关键字,这使得语法简单明了。
稍后添加其他类型时,将 unsigned
、short
和 long
等说明符添加到现有类型名称而不是而不是引入新的关键字(这可能会破坏现有的代码)。当 ANSI C 委员会在 1989 年对该语言进行标准化时,他们必须从现有的不太正式的定义中建立一个连贯的结构,同时与现有的实现保持一致。结果就是我们现在的结果,其中 int long unsigned long
是一个有效的类型名称(通常写成 unsigned long long
)。
如果现在是从头开始设计语言,我怀疑会采用不同的方法。也许每个基本类型都有一个关键字(例如,这是 C# 采用的方法),或者基本类型名称可能会使用一些更连贯的方案而不是困惑的关键字(例如,int:2
表示 2 字节整数,unsigned:4
表示 4 字节无符号整数)。但是 C 和 C++ 都坚持当前的方法。
关于c++ - unsigned 关键字可以以非显而易见的方式使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7743734/