我需要对以下c ++语法进行一些解释:
for(const auto& ioDev : deviceList)
Run Code Online (Sandbox Code Playgroud)
鉴于:
std::vector<Device *> deviceList
Run Code Online (Sandbox Code Playgroud)
具体来说,我对':'和'auto'的使用感到困惑?
Cha*_*had 13
这是一个基于循环的范围,它具有相同的基本行为:
for(auto it = deviceList.begin(); it != deviceList.end(); ++it)
{
const auto& ioDev = *it;
}
Run Code Online (Sandbox Code Playgroud)
基于for循环的范围已经很快成为我最喜欢的结构之一,它很简洁,当你需要迭代整个范围时,尽可能地(并且有效地)工作.
如果你需要典型for循环的其他结构(比如在某些情况下提前退出),那么基于范围的for不适用于该用例.
正如Chad的回答所述,你的for循环vector使用它begin和end迭代器迭代你的.这是冒号:语法的行为.
关于你的const auto &语法:你应该想象出来的是什么代码:
// "i" is an iterator
const auto& ioDev = *i;
Run Code Online (Sandbox Code Playgroud)
表达式*i是(引用)容器中元素的类型:Device *.这是推断出的类型auto.因为你已经const &附加了你auto的变量,所以变量ioDev是const对推导类型(指针)的引用,就好像它是这样声明的:
const Device *& ioDev = *i;
Run Code Online (Sandbox Code Playgroud)
这似乎不必要地复杂化; 如果你只需要正常的迭代(而不是例如操纵指针的地址,我认为这是不太可能),使用一个未经修改的普通auto:
for (auto ioDev : deviceList)
Run Code Online (Sandbox Code Playgroud)
或明确的类型:
for (Device* ioDev : deviceList)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18255 次 |
| 最近记录: |