【发布时间】:2017-08-04 08:47:54
【问题描述】:
int i = 0;
等价于
int i;
i = 0;
那么,
auto i = 0;
没关系,工作正常。但是,
auto i;
i = 0;
编译器报错。
那么,为什么编译器会报错?
【问题讨论】:
-
您的最后一个 sn-p 显然无效,编译器将如何尝试推断类型?一旦你声明了一个变量,编译器需要知道足够的知识来推断类型、存储和大小。输入
auto i时没有信息 -
前两个代码 sn-ps 并不完全等价,它们只是对
ints 有类似的效果。如果它是具有用户定义的构造函数和赋值运算符的类类型,结果可能会完全不同。 -
int i = 0;不等同于int i; i = 0;。第一个定义i并使用0的值对其进行初始化。第二个定义i,没有初始化,然后赋值给0。 -
@EdChum:简单地说,编译器可以查看块的其余部分来确定变量类型或完全丢弃它。其他语言这样做,C++ 决定采用更简单的模型。
-
@Deduplicator 在
constexpr函数中允许使用一个;另一个不是。