2012-02-15 35 views
4

函數或成員函數中默認參數的有效表達式的所有可能類型是什麼?默認函數參數的有效表達式

+0

你需要更具體一些。 – 2012-02-15 01:45:38

+0

我的問題是故意的一般。我想知道我可以使用哪些類型的表達式作爲默認參數。這不僅僅是要求幫助解決一個bug。 – 2012-02-15 01:48:41

+0

http://msdn.microsoft.com/en-us/library/e1dbzf09.aspx – 2012-02-15 01:51:02

回答

4

任何在賦值給函數參數類型變量的上下文中都是正確的。

編輯
編譯過程中的默認參數在類型正確性等方面進行評估,但不計算和賦值發生,直到運行時。您可以指定尚未定義的類的構造函數作爲默認參數,並且沒關係,只要在函數使用點定義了類...實際計算/分配發生在函數調用期間,而不是在點函數聲明/定義。

實施例:

#include <iostream> 

void foo(int a = std::rand()) 
{ 
    std::cout << a << std::endl; 
} 

int main(void) 
{ 
foo(); 

return(0); 
} 

Program output on ideone.com

1804289383

+0

這是錯誤的。您可以將變量分配給只能在運行時確定的變量,但不能將它們用作默認參數。例如,你可以做'int a = std :: rand()',但是你不能'void Class :: foo(int a = std :: rand())'。 – 2012-02-15 01:52:52

+0

@EmileCormier你錯了。 – lapk 2012-02-15 01:55:09

+0

哎呀,對不起。我讓我的錯誤的先入爲主再次變得更好。 – 2012-02-15 01:57:14

4

這是在C++ 03標準的第8.3.6詳述。它基本上等於任何不依賴於局部範圍內的任何表達式,因此任何依賴於局部變量,函數參數或「this」的表達式都將被排除。

+0

這非常讚賞AzzA的回答。我希望我能接受這兩個答案。 – 2012-02-15 02:11:44