[英]What does variable definition do in control structure in c++?
如果將變量定義用作if
, while
, for
語句的控制結構,該怎么做?
考慮一下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.