簡體   English   中英

變量定義在c ++中的控件結構中起什么作用?

[英]What does variable definition do in control structure in c++?

如果將變量定義用作ifwhilefor語句的控制結構,該怎么做?

考慮一下C ++ Primer(第5版)的以下兩個代碼片段:

    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未聲明。

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語句,是任何最外層塊)中重新聲明;

關於第二個問題:

不知道變量定義是否“返回”布爾類型以指示定義是否成功,或者變量定義在用作控制結構的條件時會返回變量本身。

只要該變量可轉換為bool,就沒有問題。

特定

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

可以表示為

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

只要Foo可轉換為bool,就可以while有條件的情況下聲明和使用它。

這些陳述都很好。

在第一種情況下,get_num()返回分配給新聲明的變量i的值。 如果int不為零,則將其評估為true;如果它們為零,則將其評估為false。 因此,只要我不為零,該循環就會運行。

在第二條語句中,find似乎返回分配給狀態的布爾值。 只要狀態為true,循環就會運行。

在while括號內,可以使用相應的變量,即,可以在第一個循環中使用i,在第二個循環中使用status,這的確是這樣做的好處。 但是,由於您已經知道狀態為true,所以在第二個代碼段中並沒有什么意義,否則循環將不再執行。 而且,如果您在此處更改狀態,則也不起作用,因為每次循環運行都會有一個新的本地聲明的狀態變量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM