2012-01-28 58 views
0

在C++中,是否有可能使bool &函數的參數爲​​可選項?如何使默認的布爾引用參數?

void foo(bool &argument = /* What goes here? */); 

在我的函數foo,如果主叫方不關心結果投入的說法,我想編譯器在默認情況下給一個虛擬位置。否則,誰不關心調用者必須這樣做:

bool ignored; 

foo(ignored); 

回答

6

進行其他功能

void foo(){ 
    bool b=true; 
    foo(b); 
} 
+0

非常好的C++ - 唯一的解決方案。 +1 – 2012-01-28 22:59:58

+0

+1簡單,優雅,易於維護/理解。 – 2012-01-29 04:40:37

2

唯一的辦法是通過一個全局變量:

bool someArgument = false; 

void foo(bool &argument = someArgument); 
0

你可以做到這一點。但它是非常醜陋,打亂了數據位置:

static bool result__ = false; 

static void foo(bool & result = result__) 
{ 
     result = true; 
} 

int main() 
{ 
     bool v; 
     foo(); 
     foo(v); 
     return v ? 0 : 1; 
} 

由於C++支持函數重載,使用@ QuentinUK的解決方案。

+0

聰明的把戲。我同意@ QuentinUK的功能重載解決方案是最好的。 – netjeff 2012-01-29 01:00:34

0

理想情況下,您應該使用函數過載而不是嘗試解決系統問題。雖然有合法的方法來實現這一點,就像@VJovic提到的那樣。使用函數重載時,如果需要添加更多參數,則可以使其他參數可選。

0

非const引用參數意味着你的函數打算修改傳遞的對象。如果你知道你想要哪個對象是默認的,那麼就把它用作默認參數。

如果您不打算修改要通過的bool,那麼您應該聲明函數採取bool argument(即不是參考)或const bool &argument。無論哪種情況,您都可以提供一個固定的默認值true或false。