2015-11-03 30 views
2

在C++中,變量定義變成了一個操作,直到那個時刻它們纔開始處於C狀態。進行了這種更改,以便您可以將循環變量定義放置在for循環中,例如,C++中的變量定義操作的值是什麼?

for (int i = 0; i < N; i++) { 
    printf("%d", i); 
} 

我的問題是什麼是變量定義操作的值,例如,在這種情況下,什麼樣的條件語句將在這個例子中執行:

if (int i = N) { 
    printf("yes"); 
} else { 
    printf("no"); 
} 
+2

如果我== 0是假的,否則真 – 101010

+0

目前還不清楚你在問什麼。你問你爲什麼不能在'if'語句的條件下聲明變量?或者你問根據'N'的值來決定採用哪個分支?還是其他什麼東西?請詳細說明。 –

+0

@JoachimPileborg,我在問什麼是變量定義操作的值(這是一個錯誤的措辭?)和更具體的,在給定的例子中執行哪個子變量取決於N. – gmoshkin

回答

3

如果我的初始化後的值不等於再到零,如果substetement將被執行。否則,將執行else子語句。

更精確地(C++標準,6.4選擇語句)

4是在比switch語句以外的 語句初始化的聲明的條件的值是所聲明 可變的上下文值轉換爲bool

和(4.12布爾轉化)

1的PRV算術,非範圍枚舉,指針或指針 到成員類型可以轉換爲類型爲bool的prvalue。零值 值,空指針值或空成員指針值被轉換爲 爲false;任何其他值都將轉換爲true。

考慮一個簡單的例子

#include <iostream> 
#include <cstring> 

//... 

char nickname[] = "mgn1993"; 

if (char *p = std::strchr(nickname, 'm')) *p = 'M'; 

std::cout << nickname << std::endl; 

在此代碼片段變量p只需要if語句的子語句內。在外部範圍中聲明變量沒有什麼意義。

1

在提供的示例中,如果N具有非零值(在C++中將評估爲布爾值true),則輸出將爲「是」。給定示例沒有實際價值,因爲您可以非常容易地用「N」替換整個作業並獲得相同的效果。

也許有一些奇怪的條紋情況,我們非常需要使用和能夠調整N中包含的值,只有當N非零時,我們同時需要絕對保證範圍僅限於if-statement,但這似乎不太可能發生。

也就是說,例如在for循環中聲明一個變量肯定有它的優點。對於初學者來說,範圍僅限於循環,一些編譯器專門針對它進行優化,可能更清晰的代碼等。

+0

雖然你的猜測很有趣,但他們不回答這個問題。 – gmoshkin

+0

直接提供的答案 – AudreyM

+0

現在你的回答並沒有說明你使用if語句中的變量定義。 – gmoshkin

3

您可以使用它作爲評估表達式的簡寫,並在if塊內使用它的返回值。例如

if (int i = calculateSomething()) { 
    // do something with i 
} 

這相當於

int i = calculateSomething(); 
if (i) { 
    // do something with i 
} 

除了i的範圍被限制在if

1

變量定義的值是變量本身。

int i = 0; // is 0, and is therefore false 
int j = 5; // is 5, and is therefore true 

變量定義的範圍是它適用的塊。

所以:

if(int i = returnSomething()) { 
    // This point is reached if returnSomething() did not return 0 
    // i is defined in this block and can be used. 
} 
// i is not defined at that point, its scope being limited to the if block above 
相關問題