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所以你的意思是,它使用一个值来推导类型,然后使用另一个值来推导另一个类型,如果它们不同,它会给出一个错误?这比我想象的更有趣。它在标准中的任何地方吗?