У меня есть код, который использует оператор while.Внутри условного выражения я делаю поиск.В то же время условное выражение проверяет возвращаемое значение:
#include <map>
struct a {
a *up;
std::map<int,int> tbl;
};
void p(a *_a, int id) {
decltype(_a->tbl)::iterator i;
while (_a && (i = _a->tbl.find(id)) != _a->tbl.end()) {
i->second += 1;
_a = _a->up;
}
}
int main(int arc, char **argv) {
a _a1{0,{{0,10},{1,10}}};
a _a0{&_a1,{{2,11},{3,11}}};
p(&_a0, 0);
return 0;
}
Однако я бы хотел избавиться от явного объявления i
.Я хотел бы использовать auto
.В псевдокоде:
...
void p(a *_a, int id) {
while (_a && ((auto i = _a->tbl.find(id))) != _a->tbl.end()) {
i->second += 1;
_a = _a->up;
}
}
...
Существует ли в c ++ 11/14/17 конструкция, поддерживающая такого рода объявления внутри выражения?Не только while(auto i = 1) {...}
объявления стиля?Может быть, есть некоторые новые функции, которые позволяют это?