C++11 标准中的哪一部分规定了基本数据类型大小之间的相对顺序?

2024-02-09

我试图找出C++标准是否规定了各种类型的大小之间的关系。例如,这个答案位于https://stackoverflow.com/a/589599/1175080 https://stackoverflow.com/a/589599/1175080似乎声称:

sizeof(short int) <= sizeof(int) <= sizeof(long int)

另一个答案在https://stackoverflow.com/a/589684/1175080 https://stackoverflow.com/a/589684/1175080有类似的说法:

sizeof(int) <= sizeof(long)

我正在经历n3337.pdf http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf(我相信 C+11 标准的一个很好的代表)但我找不到保证这些不平等的特定语言。

In n1256 http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf(C99),我可以在章节中找到具体的语言5.2.4.2.1 尺寸 整数类型它清楚地说明了每种类型的最小值和最大值,间接建立了尺寸之间的相对顺序。

这些不等式是在 C++ 标准中类似定义的还是直接从 C 继承的?标准中的语言在哪里?


在 n3337 中,该部分是3.9.1 https://timsong-cpp.github.io/cppwp/n3337/basic.types#basic.fundamental, [基础.基础]/2 https://timsong-cpp.github.io/cppwp/n3337/basic.fundamental#2,第二段(重点是我的):

有五种标准的有符号整数类型:“signed char”、“short int”、“int”、“long int”和“long long int”。在这份名单中,每种类型至少提供与其前面的列表一样多的存储空间。还可能存在实现定义的扩展有符号整数类型。标准和扩展有符号整数类型统称为有符号整数类型。普通整数具有执行环境架构所建议的自然大小44;提供其他有符号整数类型以满足特殊需求。


注意5.2.4.2/1 http://port70.net/~nsz/c/c11/n1570.html#5.2.4.2.1C 标准中只定义了每个整数类型的最小范围,它不强制排序 - 我可以int从 -32767 到 32767 以及short从 -2147483647 到 2147483647 并且仍然符合本节。

However 6.2.5.8 http://port70.net/~nsz/c/c11/n1570.html#6.2.5p8更加明确:

对于任何两个具有相同符号和不同整数转换等级的整数类型(参见6.3.1.1),具有较小整数转换等级的类型的值的范围是另一个类型的值的子范围。

And 6.3.1.1 http://port70.net/~nsz/c/c11/n1570.html#6.3.1.1告诉你:

long long int 的等级应大于 long int 的等级,long int 的等级应大于 int 的等级,int 的等级应大于 Short int 的等级,short int 的等级应大于signed char 的等级。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++11 标准中的哪一部分规定了基本数据类型大小之间的相对顺序? 的相关文章

  • C# AES Rijndael - 检测无效密码

    我正在使用 Rijndael 加密程序中的一些敏感数据 当用户输入错误的密码时 大多数情况下CryptographicException抛出消息 填充无效且无法删除 然而 CryptStream 不会抛出密码错误的异常 而是返回错误解密的流
  • C# 中的 Culture 相当于 Java 中的 Locale 吗?

    C 使用文化的概念 这在操作上与 Java 中的 Locale 类似吗 或者底层概念是否存在显着差异 从文化而不是语言环境的角度进行工作是一种寻找正确抽象层次的尝试 从以类似方式做事的人群的角度来考虑事物 而不是谈论地理区域和语言 并有点疯
  • 无法对 ContainsGenericParameters 为 true 的类型或方法执行后期绑定操作

    我有一个适用于所有实体的扩展 public static class EntityBaseExtensions public static T Clone
  • C 中的分段错误

    我需要用 0 填充二维数组 但编译后的程序会出现此错误 怎么了 int main int vert 1001 1001 int hor 1001 1001 int dudiag 1416 1416 int uddiag 1416 1416
  • 当“”可以分配给std::string时,为什么有“clear”方法?

    一个可以用string clear函数清空字符串 也可以使用空双引号 来执行此操作 有什么不同 当您分配一个空字符串时 编译器必须在数据部分存储一个空的 C 字符串 并创建代码以将指向它的指针传递给赋值运算符 然后 赋值运算符必须从数据部分
  • 使用 gcc 编译 C 时,预处理的 .i 文件中的数字意味着什么?

    我想了解编译过程 我们可以使用以下命令查看预处理器中间文件 gcc E hello c o hello i or cpp hello c gt hello i 我大致知道预处理器的作用 但我很难理解某些行中的数字 例如 1 usr incl
  • 函数原型和数组参数

    我正在学习 C 语法 并且已经开始研究数组了 我想问你一个问题 但首先让我回顾一下 这样我就知道我已经弄清楚了 我知道您可以使用以下语法将变量定义为数组 name
  • 将内核链接到 PTX 函数

    我可以使用 PTX 文件中包含的 PTX 函数作为外部设备函数 将其链接到另一个应调用该函数的 cu 文件吗 这是另一个问题CUDA 将内核链接在一起 https stackoverflow com questions 20636800 c
  • 使用 boost::iterator_facade<>

    我有一个链表结构 struct SomeLinkedList const char bar int lots of interesting stuff in here DWORD foo SomeLinkedList pNext 它是现有
  • .NET 中 IEqualityComparer 中 GetHashCode 的作用是什么?

    我试图了解 IEqualityComparer 接口的 GetHashCode 方法的作用 下面的例子取自MSDN using System using System Collections Generic class Example st
  • 最小对的总和

    Given 2N点 in a 2D plane 你必须将它们分组为N pairs使得所有对的点之间的距离的总和是最小可能值 所需的输出只是总和 换句话说 如果a1 a2 an分别是第一对 第二对 和第 n 对点之间的距离 则 a1 a2 a
  • 复杂的 C 声明

    我刚刚在互联网上浏览了一些代码 发现了这个 float foo SIZE SIZE 我如何阅读这份声明 是否有一套特定的规则来阅读如此复杂的声明 我有一段时间没做这个了 从 开始foo然后向右走 float foo SIZE SIZE fo
  • 如何在 C# 中通过 JavaScript 回调运行 QUnit 测试并获取测试结果?

    在我的几个项目中 我使用 MVC 模式将代码 关注点 分为 3 层 模型层和控制层都在 C 上运行 因此我使用 MSTest 或 NUnit 等测试框架来验证这些层的功能需求 对于视图层 我使用 QUnit 来测试 JavaScript 文
  • 派生类的聚合初始化

    以下代码无法使用 Visual Studio2017 或在线 GDB 进行编译 我期望它能够编译 因为迭代器只是一个具有类型的类 并且它是从公共继承的 这是不允许的还是在 VS2017 中不起作用 template
  • 使用std::begin()、std::end()将ArrayXd转换为stl向量,

    在我看来我应该能够使用std begin and std end 转换ArrayXd to std vector
  • 序列化时如何跳过 xml 声明?

    我正在尝试输出一个没有 xml 头的 xml 文件 例如 我试过 Type t obj GetType XmlSerializer xs new XmlSerializer t XmlWriter xw XmlWriter Create c
  • C# 记录类型:记录子类之间的相等比较

    给定父记录类型 public record Foo string Value 和两个记录子类Bar and Bee我想知道是否可以实施Equals在基类中 因此 Foo Bar 或 Bee 的实例都被考虑equal基于Value 两者都与E
  • Azure Function App Azure 服务总线触发器触发两次

    我使用带有服务总线触发器的 Azure Function Apps 来读取服务总线并对服务总线消息的内容执行操作 服务总线接收 JSON 序列化对象 然后将 JSON 消息反序列化回 Function App 中的对象 然而 由于某种原因
  • MonoGame 中的 ContentLoadException

    我一直在尝试使用 Xamarin Studio 在 MonoGame 中加载纹理 我的代码设置如下 region Using Statements using System using Microsoft Xna Framework usi
  • “保留供任何使用”是什么意思?

    注意 这是一个c questions tagged c问题 虽然我补充说c questions tagged c 2b 2b如果某些 C 专家可以提供 C 使用与 C 不同的措辞的基本原理或历史原因 在 C 标准库规范中 我们有这个规范文本

随机推荐