[编辑:下面讨论的声明在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是否存在差异,因此两个标签都存在差异。
答案 0 :(得分:6)
n
中const n = 1u;
的类型是什么?我认为它也是int
在C89 / C90中,类型为int
。有一条规则,如果声明中缺少类型名称,则隐式int
。自C99以来,该规则不存在,声明形成不良。
在C ++中,自第一个标准版本以来,声明格式不正确。如果要将类型推断为unsigned int
,则可以使用const auto n = 1u;
,因为C ++ 11。在C中,auto
不具有自动类型推导的含义。
int
中的隐含unsigned
- > unsigned int
和short
- > short int
等仍然存在于两种语言中。