BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #90469同步于 2016/3/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

for循环括号里面的3个东西怎么只有2个啊?

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