C++ 在C+;中使用auto和两个声明时会发生什么+;11?

C++ 在C+;中使用auto和两个声明时会发生什么+;11?,c++,c++11,auto,C++,C++11,Auto,假设有这样一个循环: for(size_t i=0, n=ar.size(); i<n; ++i) { // ... } auto i=0, s=""; g++4.8.4为“auto”生成一个不一致的推断错误:“int”和“const char*”。但我无法确定它是否只是g++或者根据标准,使用类型推断中的每个值实际上都需要它。这是[dcl.spec.auto,7.1.6.4]/8: 如果init声明器列表包含多个init声明器,则它们都应构成变量声明。每个声明变量的类型如上所述确

假设有这样一个循环:

for(size_t i=0, n=ar.size(); i<n; ++i)
{
  // ...
}
auto i=0, s="";

g++4.8.4为“auto”生成一个不一致的推断错误
:“int”和“const char*”
。但我无法确定它是否只是g++或者根据标准,使用类型推断中的每个值实际上都需要它。

这是[dcl.spec.auto,7.1.6.4]/8:

如果init声明器列表包含多个init声明器,则它们都应构成变量声明。每个声明变量的类型如上所述确定,如果替换占位符类型的类型在每个推导中不相同,则程序的格式不正确

也就是说,所有推导的类型必须相同

同一段中甚至有一个例子:

auto x = 5, *y = &x;       // OK: auto is int
auto a = 5, b = { 1, 2 };  // error: different types for auto

这是[dcl.spec.auto,7.1.6.4]/8:

如果init声明器列表包含多个init声明器,则它们都应构成变量声明。每个声明变量的类型如上所述确定,如果替换占位符类型的类型在每个推导中不相同,则程序的格式不正确

也就是说,所有推导的类型必须相同

同一段中甚至有一个例子:

auto x = 5, *y = &x;       // OK: auto is int
auto a = 5, b = { 1, 2 };  // error: different types for auto

这不是在类型推断中使用每个值的情况。这是因为
i
s
的推导类型需要相同,但它们不是。@Peter所以你的意思是,它使用一个值来推导类型,然后使用另一个值来推导另一个类型,如果它们不同,它会给出一个错误?这比我想象的更有趣。它在标准中的任何地方吗?它不是在类型推断中使用每个值的情况。这是因为
i
s
的推导类型需要相同,但它们不是。@Peter所以你的意思是,它使用一个值来推导类型,然后使用另一个值来推导另一个类型,如果它们不同,它会给出一个错误?这比我想象的更有趣。它在标准中的任何地方吗?