我有一个使用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) {...}
样式声明?也许有一些新功能可以做到这一点? 最佳答案
如何将这两个条件分开?继续循环的主要对象是_a
,次要对象(可能始终为true)是_a->tbl.find(id) != _a->tbl.end()
。返回其否定:
void p(a *_a, int id) {
while (_a) {
auto i = _a->tbl.find(id);
if (i == _a->tbl.end()) {
return;
}
i->second += 1;
_a = _a->up;
}
}
关于c++ - 在C++中的while条件表达式内自动声明变量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53802102/