我想知道,
for(std::map<int, double, std::greater<int> >::iterator it = mymap.begin(); it != mymap.end(); ++it)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
为什么我不能写这个:
for(mymap::iterator it = mymap.begin(); it != mymap.end(); ++it)
{
//do stuff
}
Run Code Online (Sandbox Code Playgroud)
当然,对地图进行类型化会使第一个代码更简洁 - 但这不是我的观点.编译器知道类型mymap,为什么不让它解决mymap::iterator?有没有理由iterator无法通过实例访问?
AnT*_*AnT 12
::是一个范围解析运算符,它在左侧需要类型名称或命名空间名称.它不接受左侧的对象名称.允许这可能会使语言中的许多内容过于复杂化.
实际上,如果允许这样的东西,可能会将此功能附加到.操作符,因为.操作符是与LHS上的对象一起使用的操作符
for (mymap.iterator it = mymap.begin(); it != mymap.end(); ++it)
Run Code Online (Sandbox Code Playgroud)
但无论如何,这仍然会使事情过于复杂化.
在未来的C++标准中,类似的东西将通过decltype关键字成为可能
for (decltype(mymap)::iterator it = mymap.begin(); it != mymap.end(); ++it)
Run Code Online (Sandbox Code Playgroud)
PS根据维基百科的文章decltype,它在合格ID中的可用性是一个有争议的问题.如果我理解正确,这种用法最终被投票.
PPS另外,正如@Asha在评论中指出的那样,在将来的C++中,你将能够避免命名类型
for (auto it = mymap.begin(); it != mymap.end(); ++it)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1211 次 |
| 最近记录: |