`const n = 1u中``n`的类型是什么?

时间:2018-02-19 09:14:40

标签: c++ c types const variable-declaration

[编辑:下面讨论的声明在C ++和现代C中无效;他们依赖于C的“隐含int”规则,后来被删除了。 Herb Sutter讨论了变化in a reader Q&A。感谢评论者和user2079303指出这一点。]

我想知道C ++中const变量类型的推断。

我们的旧编译器编译声明const n = 1;。我假设n的类型为const int。我认为int不是从初始化表达式(1)的类型推断出来的,而是一个简单的语法规则。

const n = 1u;中n的类型是什么?我认为它也是int,但是在C ++ 17标准草案中找不到规则(这让我想知道它是否实际上是非法的但是被宽松的编译器所容忍)。同样令人感兴趣的是C是否存在差异,因此两个标签都存在差异。

1 个答案:

答案 0 :(得分:6)

  

nconst n = 1u;的类型是什么?我认为它也是int

在C89 / C90中,类型为int。有一条规则,如果声明中缺少类型名称,则隐式int。自C99以来,该规则不存在,声明形成不良。

在C ++中,自第一个标准版本以来,声明格式不正确。如果要将类型推断为unsigned int,则可以使用const auto n = 1u;,因为C ++ 11。在C中,auto不具有自动类型推导的含义。

int中的隐含unsigned - > unsigned intshort - > short int等仍然存在于两种语言中。