【问题标题】:Is signed/unsigned part of base type or is it a qualifier是基本类型的有符号/无符号部分还是限定符
【发布时间】:2018-06-29 16:19:33
【问题描述】:

Wiki page 声称 C++ 中的限定符是 constvolatile

This answer告诉unsignedunsignedshort等也是限定符。尽管问题确实提到了它是关于 C 的,但 Wiki page 在 C 方面也没有这么说。对于 C,限定符是 constvolatilerestrict_Atomic

Stack Overflow 的qualifier Tag 的扩展消息框显示

限定符增加了额外的“质量”,例如指定波动性或 变量的常数

“添加一个额外的质量”,从引用来看,singed/unsigned 似乎满足条件,它将受限的额外质量添加到一个整数中,这样它就可以只包含正数或负数。

我现在对这个问题有点困惑。对于CC++,是signedunsignedshort等算作基类型的一部分类型限定符?如果 C 和 C++ 中的规则不同,请详细说明。

【问题讨论】:

  • “对于除引用和函数之外的所有类型,类型系统支持该类型的三个额外的 cv 限定版本(const、volatile 和 const volatile)。” 请参阅: en.cppreference.com/w/cpp/language/typeen.cppreference.com/w/cpp/language/types 这对于 C 和 C++ 来说可能是不同的。
  • signedunsigned 不能用于任何类型。 C11 _Generic 是按类型划分的开关盒。它丢弃constvolatile qualitfier,但不丢弃signness。但这真的重要吗?你可以检查标准,但即使那样它仍然只是一个文字游戏。
  • @SLN 更正了谢谢现在应该说 .../type 和 .../types
  • 区分 C++ 标准定义的“限定符”和字典中定义的“限定符”有些重要。有些文本似乎使用“限定符”作为“说明符”的同义词,这不是标准含义。
  • C++ 中所有类型的图形表示,以及它们的分类方式:howardhinnant.github.io/TypeHiearchy.pdf

标签: c++ c qualifiers


【解决方案1】:

在 C 和 C++ 中,signedunsignedshortlong 都是类型说明符。它们可以与int 组合,甚至是隐含的。 signedunsigned也可以和char结合使用。

相比之下,限定词几乎可以应用于任何类型。 (没有int& const类型,只有int const&

【讨论】:

    【解决方案2】:

    根据 C11 标准 (§6.7.3),类型限定符constrestrictvolatile_Atomicsignedunsigned 属于类型说明符 (§6.7.2)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      • 1970-01-01
      • 2012-05-29
      • 2022-01-03
      相关资源
      最近更新 更多