2014-10-01 143 views
1

下面的代碼是否安全並在標準中定義?如果'條件'爲真,我會增加2嗎?for循環C++中的額外增量

for (size_t i = 0; i < 100; i++) { 
    do_something; 
    if (condition) 
     i++; 
} 
+6

是的。寫這樣的東西是很常見的。 'for'主要是一個'while'循環的語法糖。 – 2014-10-01 13:09:18

+1

是的,毫無疑問...這是程序的一般流程,沒有特殊情況 – nobalG 2014-10-01 13:11:24

+0

IMO,不是因爲它在標準中被允許並且它的工作原因使得它安全(和/或從長遠來看易於維護)。 – Max 2014-10-01 13:12:05

回答

3

當然。它沒有錯 - 語法上。你甚至可以做這樣的事情:

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()) 
+0

是的 - 我意識到這樣的事實,它不像編譯器那樣完全相同(do_something_begin()的變量範圍是錯誤的),但出於教育方面的原因,我認爲最好保持這樣。 – Jendas 2014-10-01 13:24:51

+0

值得指出的是,在其他一些語言中,修改循環內的循環計數器是非法的,並且在循環外循環計數器的值是未定義的(不管變量的作用域如何)。 C/C++不是這樣的。不要讓它在其他語言中是非法的事實讓你在C/C++中無法實現。 – 2014-10-01 13:27:47

0

如果我從0開始的條件爲真,則I = 1,則當循環迭代再次我將增加1到2,從而肯定的。

0

是你剛纔寫

size_t i = 0; 

while (i < 100) { 
    do_something; 
    if (condition) 
     i++; 
    i++; 
} 

這是完全合法的。如果我是你,我會添加一條評論,說「跳過下一個」。