代码之家  ›  专栏  ›  技术社区  ›  ReWrite

C++语言标准如何说明StasyType如何处理减少整数的大小?

  •  6
  • ReWrite  · 技术社区  · 15 年前

    我想知道C++语言标准所规定的规则,比如:

    long x = 200;
    short y = static_cast<short>(x);
    

    y 保证是200,还是标准由实现决定?各种编译器对标准的遵守程度如何?

    2 回复  |  直到 15 年前
        1
  •  9
  •   Michael Burr    15 年前

    在这种情况下, static_cast<> 是“显式类型转换”。本标准对4.7/3“积分转换”中的积分转换进行了说明:

    如果目标类型有符号,则如果可以在目标类型(和位字段宽度)中表示该值,则该值不变;否则,该值是实现定义的。

    自从 short 保证能够持有价值 200 ( 短的 必须至少是16位),那么对于您的特定示例,答案是“是”。

    各种编译器都很好地遵循这种行为——自从C的前ANSI时代以来就是这样的,如此多的代码依赖于这种行为,以至于编译器供应商似乎不愿意发布关于截断可能性的警告。

        2
  •  -2
  •   Peter Alexander    15 年前

    如果该值在 short 那么这个值就保证是正确的,在你的例子中是正确的,所以 y == 200 .

    如果它落在外面(例如 static_cast<short>(1000000000) )那么,行为是未定义的。大多数编译器只会将二进制数字截断到正确的大小。