【发布时间】:2018-02-19 09:14:40
【问题描述】:
[编辑:下面讨论的声明在 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 是否会有所不同,因此这两个标签。
【问题讨论】:
-
const n = 1不应该在 C++ 中编译。 -
const n = 1;在现代 C 中也是无效的。 -
@user463035818 在 C89 中,C 具有允许它的“隐式 int”规则。但它自 C99 以来已被删除,这是有充分理由的。
-
如果你想要推断的类型,那么你需要把它拼出来。
const auto n = 1u;否则你只有一个格式错误的声明。 -
@user463035818 C 曾经是一门非常简单的语言,如果你只想要
int,就不需要到处都需要类型。例如,您可以声明没有类型的函数参数,默认为int。我自己没有见过const n = 1,但我相当肯定它曾在“史前”时代被允许。
标签: c++ c types constants variable-declaration