【问题标题】:C++ type promotion below int [duplicate]C++ 类型提升低于 int [重复]
【发布时间】:2021-08-12 13:29:01
【问题描述】:

我知道 int 提升的工作原理是将所有内容都设为 int(或 uint)。

当我有这个功能时,这很适用:

void f(int x) { ... }

我用char 来称呼它,例如:

char c = 'A';
f(c);

但是,如果 f 是用 short 参数定义的呢?

void f(short x) { ... }

如果我现在打电话给f(c),到底会发生什么? 'A' 是否被提升为 int,然后被截断为 short?该标准似乎没有对此做出任何规定。

【问题讨论】:

  • 在这两种情况下发生的不是促销,而是conversion
  • @Someprogrammerdude:“请注意,所有其他转换都不是提升;例如,重载解析选择 char -> int(提升)而不是 char -> short(转换)。” 一个是推广,另一个是转化。

标签: c++ types type-conversion


【解决方案1】:

整数提升是指任何小于int 的数据类型在对其执行操作时如何转换为int(或uint)。但在这种情况下,您不执行操作,因此整数提升不适用。

相反,您尝试将char 传递给short 变量,因此类型扩展适用。 char 中的任何值都可以转换为 short 而不会丢失信息,因此允许隐式转换。

【讨论】:

    猜你喜欢
    • 2011-08-21
    • 2012-05-10
    • 2011-12-18
    • 1970-01-01
    • 2013-08-08
    • 2011-01-17
    • 2012-11-02
    • 2015-03-05
    • 2023-04-01
    相关资源
    最近更新 更多