2016-03-07 54 views
1

如果我將它用作ifwhilefor語句的控制結構,那麼變量defintion會做什麼?變量定義在C++的控制結構中做什麼?

考慮的代碼,這兩個片段來自C++ Primer(5th Edition)

while (int i = get_num()) //i is created and initialized on each iteration 
    cout << i << endl; 

while(bool status = find(word)) {/*...*/} //assume that find(word) returns a bool type 

我不知道變量定義「收益」一bool類型是否指示定義的成功,或當用作控制結構的條件時,變量定義返回變量本身。 我認爲第二個片段正常工作,因爲status=運算符的結果。條件測試status是否爲true。 我的一位朋友說第二個片段出錯,因爲變量status未申報。

+0

assignemnt運算符通常返回對左側的引用。 'a = b'返回對a的引用。 Ifi可以轉換爲'bool',可以在條件下檢查(非零'int'轉換爲true)。 – MagunRa

+1

[c-variable-declaration-in-if-expression](http://stackoverflow.com/questions/7836867/c-variable-declaration-in-if-expression)和[defined-a-variable-in -the-條件部分的-AN-if語句(http://stackoverflow.com/questions/12655284/defining-a-variable-in-the-condition-part-of-an-if-statement) – Jarod42

+0

@MagunRa - 這裏沒有賦值操作符。這些'='符號是**初始化**,不是賦值。 –

回答

2

while循環期望得到bool表達式。

while({BOOL}) {...} 

在碼的情況下上述

while(bool status = find(word)) {...} 

簡化向下

while(status) {...} 

狀態在循環的每一次執行的開始被初始化爲find(word)結果。

status然後在循環內可用。

§3.3。3塊範圍

在for-init-statement,for-range-declaration以及if,while,for, 和switch語句中聲明的名稱是if,while,for或switch語句(包括受控的 語句),並且不得在該語句的後續條件中或在受控語句的最外層 塊(或if語句中的任何最外面的塊)中重新聲明;

關於你提到的第二個問題:

不知道布爾類型是否變量定義「收益」來表示的定義成功,或變量定義返回變量本身的條件下使用時,控制結構。

只要變量可以轉換爲布爾值就沒有問題。

鑑於

while(Foo x = Expression()) {...} 

可只要Foo是轉換爲bool表示

while(static_cast<bool>(x)) {...} 

,它可以聲明,並在有條件的while使用。

0

這些陳述都很好。

在第一種情況下,get_num()返回一個分配給新聲明的變量i的值。如果它們不是零,則將其評估爲真;如果它們爲零,則將其評估爲假。所以,只要我不是零,這個循環就會運行。

在第二條語句中,find似乎返回一個分配給status的bool。只要狀態爲真,循環就會運行。

在可以使用相應變量的括號內,即可以在第一個循環中使用i,在第二個循環中使用狀態,這真的是寫入的好處。但是,在第二個代碼片段中它並沒有什麼意義,因爲您已經知道狀態爲真,否則循環將不再執行。如果你改變狀態,這也不起作用,因爲每次循環運行都會有一個新的本地聲明的狀態變量。

+0

感謝您的回答。;-) – Corrado

相關問題