Pet*_*ica 1 c c++ types const variable-declaration
[编辑:下面讨论的声明在C++和现代C中无效; 他们依赖于C的"隐含int"规则,后来被删除了.Herb Sutter讨论了读者问答的变化.感谢评论者和user2079303指出这一点.]
我想知道C++中const变量类型的推断.
我们的旧编译器编译声明const n = 1;.我会假设n有这种类型const int.我认为这int不是从初始化表达式(1)的类型推断出来的,而是一个简单的语法规则.
那么n的类型是const n = 1u;什么?我认为它也是int,但是在C++ 17标准草案中找不到规则(这让我想知道它是否实际上是非法的但是被宽松的编译器所容忍).同样令人感兴趣的是C是否存在差异,因此两个标签都存在差异.
是什么类型
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等两种语言中仍然存在.