下面的代碼是否安全並在標準中定義?如果'條件'爲真,我會增加2嗎?for循環C++中的額外增量
for (size_t i = 0; i < 100; i++) {
do_something;
if (condition)
i++;
}
下面的代碼是否安全並在標準中定義?如果'條件'爲真,我會增加2嗎?for循環C++中的額外增量
for (size_t i = 0; i < 100; i++) {
do_something;
if (condition)
i++;
}
當然。它沒有錯 - 語法上。你甚至可以做這樣的事情:
int i = 0;
for (;;) {
if (i >= 100) {
break;
}
++i;
}
此代碼相當於
int i = 0;
while(true) {
if (i >= 100) {
break;
}
++i;
}
進而 - 你幾乎可以把任何有效的代碼放到for語句。例如。
for (do_something_begin(); some_condition(); do_something_end()) {
CODE;
}
,並使用此代碼做什麼編譯器是這樣的:
do_something_begin()
do {
CODE;
do_something_end();
} while (some_condition())
是的 - 我意識到這樣的事實,它不像編譯器那樣完全相同(do_something_begin()的變量範圍是錯誤的),但出於教育方面的原因,我認爲最好保持這樣。 – Jendas 2014-10-01 13:24:51
值得指出的是,在其他一些語言中,修改循環內的循環計數器是非法的,並且在循環外循環計數器的值是未定義的(不管變量的作用域如何)。 C/C++不是這樣的。不要讓它在其他語言中是非法的事實讓你在C/C++中無法實現。 – 2014-10-01 13:27:47
如果我從0開始的條件爲真,則I = 1,則當循環迭代再次我將增加1到2,從而肯定的。
是你剛纔寫
size_t i = 0;
while (i < 100) {
do_something;
if (condition)
i++;
i++;
}
這是完全合法的。如果我是你,我會添加一條評論,說「跳過下一個」。
是的。寫這樣的東西是很常見的。 'for'主要是一個'while'循環的語法糖。 – 2014-10-01 13:09:18
是的,毫無疑問...這是程序的一般流程,沒有特殊情況 – nobalG 2014-10-01 13:11:24
IMO,不是因爲它在標準中被允許並且它的工作原因使得它安全(和/或從長遠來看易於維護)。 – Max 2014-10-01 13:12:05