Jay*_*esh 2 c++ types auto c++11
int i = 0;
Run Code Online (Sandbox Code Playgroud)
相当于
int i;
i = 0;
Run Code Online (Sandbox Code Playgroud)
然后,
auto i = 0;
Run Code Online (Sandbox Code Playgroud)
没关系,工作正常.但,
auto i;
i = 0;
Run Code Online (Sandbox Code Playgroud)
编译器给出错误.
那么,为什么编译器会出错?
它不等同,因为auto它不是一种类型.在两个示例中,i类型是int.auto表示变量类型是由它初始化的表达式类型决定的(在这种情况下,它是int,因为它是文字的类型0).那是,
auto i = 0;
Run Code Online (Sandbox Code Playgroud)
相当于:
int i = 0;
Run Code Online (Sandbox Code Playgroud)
片段
auto i;
i = 0;
Run Code Online (Sandbox Code Playgroud)
没有意义,因为没有表达式,编译器可以从中推断出类型.
有人可能会争辩说编译器可能会进一步推断类型,但这对于价值不大会有额外的努力,所以它不太可能让位于未来的C++标准中.以下示例将推断出哪种类型:
auto i;
if (...)
i = 0;
else
i = "WAT?";
Run Code Online (Sandbox Code Playgroud)
BTW,int i = 0;相当于int i; i = 0但不一样.首先是初始化,第二个是默认初始化,然后是赋值.对于非类型的int类,即具有非平凡构造函数和/或赋值运算符的类,这两个片段可能不等效.