for 陳述式 (C++)
執行陳述式 和 迴圈運算式 直到 cond 運算式 重複變成 false。如需陳述式範圍架構的詳細資訊,請參閱 以範圍為基礎的 for 陳述式 (C++)。
for ( init-expression ; cond-expression ; loop-expression )
statement
備註
使用 for 陳述式建構必須執行指定次數的迴圈。
如下表所示, for 陳述式包含三個選擇性部分,。
for 迴圈項目
語法名稱 |
當執行 |
內容 |
---|---|---|
init 運算式 |
在 for 陳述式之前的其他項目。init 運算式 只執行一次。控制項接著會傳遞至 cond 運算式。 |
通常會使用迴圈索引。它可能包含運算式或宣告 (僅限 C++)。 |
cond 運算式 |
在陳述式中 的每個反覆項目之前的執行,包括第一個反覆項目。陳述式 執行時,才 cond 運算式 評估為 true (非零)。 |
評估為整數型別或類別型別對整數類資料型別的明確轉換的運算式。通常用來測試一個迴圈終止準則。 |
迴圈運算式 |
在陳述式中 的每個反覆項目結束時。在 迴圈 執行的運算式之後, cond 評估運算式。 |
通常用來加入重複的索引鍵。 |
例如:
// for_statement1.cpp
#include <stdio.h>
int main() {
int i;
for ( i = 0 ; i < 2 ; i++ )
printf_s( "\n%d\n",i );
}
前面的 for 迴圈與下列 while 迴圈是相同的:
// for_statement2.cpp
#include <stdio.h>
int main()
{
int i = 0;
while ( i < 2 )
printf_s( "%d\n", i++ );
}
init 運算式 和 迴圈 運算式可以包含 逗號運算子分隔的多個陳述式。例如:
// for_statment3.cpp
#include <stdio.h>
int main()
{
int i, j;
for ( i = 5, j = 10 ; i + j < 20; i++, j++ )
printf_s( "\n i + j = %d", (i + j) );
}
for 迴圈會終止,在 中斷、 傳回或 執行 (對標記的陳述式在迴圈外) 在 陳述式內 執行。在 for 迴圈的 繼續 陳述式結束只有目前的反覆項目。
如果 cond 省略 expression,則為 true,而且迴圈不會終止沒有 break、 return或 goto 在 陳述式內。
是一種方便指定無限迴圈中使用 for 陳述式是:
for( ; ; )
{
// Statements to be executed.
}
雖然 for 陳述式的三個欄位為初始化通常使用,以測試結束並增加,它們不限於這些用途。例如,下列程式碼會列印第 0 到 4。在這個案例中, 陳述式 是這個 null 陳述式:
// for_statement4.cpp
#include <stdio.h>
int main()
{
int i;
for( i = 0; i < 5; printf_s("%d\n", i), i++)
;
}
for 迴圈和 C++ 標準
C++ 標準會在 for 迴圈中所宣告的變數會超出範圍在 for 迴圈結束之後。例如:
for (int i = 0 ; i < 5 ; i++) {
// do something
}
// i is now out of scope under /Za or /Zc:forScope
根據預設,在 /Ze下, for 迴圈中所宣告的變數在範圍中,直到 for 迴圈的封閉範圍結尾。
/Zc:forScope 可在 for 迴圈中所宣告的變數標準行為,而不需要指定 /Za。
使用 for 迴圈中檢視差異到重新宣告變數在 /Ze 下也可以如下所示:
// for_statement5.cpp
int main(){
int i = 0; // hidden by var with same name declared in for loop
for ( int i = 0 ; i < 3; i++ ) {}
for ( int i = 0 ; i < 3; i++ ) {}
}
這個密切模擬在 for 迴圈中所宣告的變數的標準行為,要求在 for 迴圈中所宣告的變數超出範圍,在迴圈完成之後。當變數在 for 迴圈宣告,編譯器內部升級至在 for 迴圈的封閉範圍的區域變數,即使已經有相同名稱的區域變數。