返回信息流for循环里面可以添加别的语句么?
for(构造一个类; !xxx();)
类似这样
一般不都是for(初始化,判断,然后啥的?)
我这个语句怎么这样呢。
C++
源文件
这是一条镜像帖。来源:北邮人论坛 / cpp / #90469同步于 2016/3/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
for循环括号里面的3个东西怎么只有2个啊?
sharonyue
2016/3/6镜像同步13 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
因为后两句话合二为一了,类似:
for (subCycle<volScalarField> alphaSubCycle(alpha1, nAlphaSubCycles); !alphaSubCycle.end(); ++alphaSubCycle) {}
【 在 byr10th 的大作中提到: 】
: 因为后两句话合二为一了,类似:
: for (subCycle<volScalarField> alphaSubCycle(alpha1, nAlphaSubCycles); !alphaSubCycle.end(); ++alphaSubCycle) {}
屌!
第一次见这么搞,哪本书中有说?
这么理解吧:
for (<只跑一次>; <每次进循环节之前跑一次,要决定进不进>; <每次出循环节之后跑一次>) {
<循环节>;
}
跑起来就是:
<只跑一次>
<进循环节之前跑一次,决定进循环>
<循环节>
<出循环节之后跑一次>
<进循环节之前跑一次,决定进循环>
<循环节>
<出循环节之后跑一次>
<进循环节之前跑一次,决定不进循环>
所以,如果每次循环节之后没什么事儿干,那第二个分号后面(<出循环节之后跑一次>)就是空语句就挺好。
一般每个循环节都有个步进的操作,比如循环变量加一、迭代器后移一位、位操作右移一步等等,这个操作实践中可以写在三个位置:<每次进循环节之前跑一次><循环节><每次出循环节之后跑一次>。一般写在<每次出循环节之后跑一次>那里会显得比较规整,读起来会比较明确,不会显得嘚瑟,是建议的位置。
你实例里的代码,如果和以下这段代码等价,那就有bug:
vector<int> vec = {};
for (auto iter = vec.begin(); (++iter) != vec.end(); ) {
// do something.
}
vec是空的,那么iter一开始就在end()位置上,++之后就不知道跑哪儿去了,有可能这辈子也没法再碰到end()了,所以会有死循环。
这么error prone的代码,还是老老实实把++写第三个slot会比较好。
【 在 clangpp 的大作中提到: 】
: 一般每个循环节都有个步进的操作,比如循环变量加一、迭代器后移一位、位操作右移一步等等,这个操作实践中可以写在三个位置:<每次进循环节之前跑一次><循环节><每次出循环节之后跑一次>。一般写在<每次出循环节之后跑一次>那里会显得比较规整,读起来会比较明确,不会显得嘚瑟,是建议的位置。
: 你实例里的代码,如果和以下这段代码等价,那就有bug:
: vector<int> vec = {};
: ...................
你好,很详细,不过我也看蒙了。
意思就是2喽的那个意思吧?
for (subCycle<volScalarField> alphaSubCycle(alpha1, nAlphaSubCycles); !alphaSubCycle.end(); ++alphaSubCycle) {}
bug倒是不会,这代码发布12年了,一直有人在更新