c++ - unsigned 关键字可以以非显而易见的方式使用吗?

标签 c++ c keyword

每次我使用 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 范围相同,但精度更高)

注意缺少的内容:没有 signedunsigned 关键字,没有 shortlong长双;所有这些都是后来添加的。 (需要无符号算术的程序员常用指针,可以与int自由互换。)

每个基本类型都有一个名称,该名称是一个关键字,这使得语法简单明了。

稍后添加其他类型时,将 unsignedshortlong 等说明符添加到现有类型名称而不是而不是引入新的关键字(这可能会破坏现有的代码)。当 ANSI C 委员会在 1989 年对该语言进行标准化时,他们必须从现有的不太正式的定义中建立一个连贯的结构,同时与现有的实现保持一致。结果就是我们现在的结果,其中 int long unsigned long 是一个有效的类型名称(通常写成 unsigned long long)。

如果现在是从头开始设计语言,我怀疑会采用不同的方法。也许每个基本类型都有一个关键字(例如,这是 C# 采用的方法),或者基本类型名称可能会使用一些更连贯的方案而不是困惑的关键字(例如,int:2 表示 2 字节整数,unsigned:4 表示 4 字节无符号整数)。但是 C 和 C++ 都坚持当前的方法。

引用:http://cm.bell-labs.com/cm/cs/who/dmr/cman.pdf

关于c++ - unsigned 关键字可以以非显而易见的方式使用吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7743734/

相关文章:

c++ - 从 cin 推回成对的 vector 给出错误的结果

C++ Xcode 构造函数错误

在 netstat 或 lsof 命令中看不到我正在运行的进程?

C:传递函数指针时出现一般 ADT 错误

c - 理解数组和循环的答案

python - `exit` 关键字在 Python3 中用 Jupyter Notebook 做什么?

c++ - 如何使用 Qt 应用程序发送传真?

c++ - 如何使这个模板参数可变?

c++ - 使用 "struct"关键字的结构实例化

java - RobotFramework导入错误: No module named foo