2016-04-23 127 views
2

比方說,我有一個函數MyFunction返回從0到10的值。0表示成功並且非零失敗。如果我想要顯示帶有值的MessageBox只有當它的非零我必須做到以下幾點:如何在if條件中聲明一個變量?

int e = MyFunction(); 
if (e != 0) { MessageBox(e); } 

如果我想有變量int E要而不會導致重新定義(因爲我不好的地方命名或東西),我可以用花括號來整件事並隔離,像這樣的變量:

int e; 
{ int e = MyFunction(); if (e != 0) { MessageBox(e); } } 

是否但是可以壓縮到這個單一的if語句,而不是像這樣:

if (int e = MyFunction() != 0) { MessageBox(e); } //obviously does not work as intended 

我知道如果語句不是真的以這種方式工作,但是有可能通過使用一些C++魔法來完成它嗎?對你們來說這聽起來可能微不足道,但我真的很想這樣做。我做了搜索,也問了,但沒有骰子。謝謝!

+3

_... C++ magic ..._問問獨角獸。 –

+0

_因爲我在命名或something_hmm不好...... :) – erip

+0

如何使用異常進行錯誤管理? – simpel01

回答

6

你可以這樣說:

if(int e = MyFunction()) 
{ 
    MessageBox(e); 
} 

這工作,因爲int自然轉換爲bool所以if()成功時e任何非零值(或者,如果將其轉換爲true布爾值) 。

這樣做的好處是您不會用錯誤返回值拋棄周圍的作用域。儘管對於某些編程人員來說,將函數調用與測試分開可能不是那麼明顯。

+0

有些人認爲這種隱含的真實性條件是不清楚/差的形式,特別是在C++中。我不一定是其中之一。 –

+0

@LightnessRacesinOrbit我並不完全決定這個問題。至少有一個針對具有可選值的狀態返回類型的提議,以促進此樣式。我認爲它清除周圍範圍的事實是有價值的,並且可能有助於減少來自共享返回代碼變量和一般變量垃圾的錯誤。 – Galik

6

你的代碼片段二是做適當/正確/最佳/清亮/最簡單的方法。

不要試圖太聰明。

0

你想不完全是,但如果原因僅僅是出場紀錄,你可以使用for代替if

for(int e = MyFunction(); e!=0; e=0) MessageBox(e); 

,但我不知道有任何理由來取代正常清晰的代碼像這樣的陳述。沒有人會向你推薦這樣的解決方案。