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排除项的丑陋技巧)
在某些可变参数模板应用程序中也可能存在用例。