2011 C++标准引入了new关键字auto
,可以用来定义变量而不是类型,即
auto p=make_pair(1,2.5); // pair<int,double>
auto i=std::begin(c), end=std::end(c); // decltype(std::begin(c))
在第二行中,i
和end
属于同一类型,称为auto
。标准不允许
auto i=std::begin(container), e=std::end(container), x=*i;
什么时候x
会是不同的类型。我的问题:为什么标准不允许最后一行?可以通过将其解释auto
为不表示某些要推导的类型,而是指示声明的任何变量的类型auto
应从其分配的值推导出来来允许。C++11 标准是否有充分的理由不遵循这种方法?
实际上有一个用例,即在for
循环的初始化语句中:
for(auto i=std::begin(c), end=std::end(c), x=*i; i!=end; ++i, x+=*i)
{ ... }
当变量i
、end
和的范围x
被限制在for
循环中时。AFAIK,除非这些变量具有通用类型,否则这无法在 C++ 中实现。它是否正确?(将所有类型放入struct
排除项的丑陋技巧)
在某些可变参数模板应用程序中也可能存在用例。