2014-02-06 82 views
-4

我們什麼時候應該使用默認參數?什麼是正確的語法,他們不應該在哪裏使用?經常使用他們的好習慣還是壞習慣?他們影響效率嗎?使用默認參數健康習慣還是壞習慣?

+0

參照這個網站。非常明確的解釋。 http://www.learncpp.com/cpp-tutorial/77-default-parameters/ –

+0

這很正常。如果你不想使用默認參數。你必須重寫函數。 – billz

+0

@billz:超載。 –

回答

1

唯一的情況下,我可以想到它會影響效率的地方是,當您將一些大的東西作爲默認參數使用時,它不會被任何調用者使用。例如:

#include <iostream> 
void foo(std::ostream& out=std::cout) { 
    out << "foo"; 
} 

如果沒有呼叫者使用默認參數,程序的其他部分並不需要<iostream>那麼它將被列入徒勞,增加可執行文件的大小(和編譯時間,這可能或者可能無關緊要)。

0

正確的語法可以在任何C++參考文獻中找到,例如, http://msdn.microsoft.com/en-us/library/91563f79.aspx。他們不應該有任何效率的影響。至於使用提示,與其他所有內容一樣,取決於具體情況。他們可能會把事情弄清楚或更復雜。 還有一件值得一提的事情 - 虛擬函數中的默認參數應該小心,因爲它們的值是基於靜態類型解析的,這可能是意想不到的。

+2

我們不要致電MSDN一個C++參考。 –

0

僅在聲明一個(部件)函數的指定了參數的默認值,如下所示:

void fun(int value = 0); 

請注意,只有在參數列表中的最終參數可以具有默認 - 值。例如。以下是被禁止的:

void fun(int v1 = 0, int v2); 

當函數定義別的地方,必須省略的默認值。

void fun(int value) 
{ 
    cout << value << '\n'; // will print 0 when nothing was passed by the user 
} 

他們這樣做以任何方式運行時的開銷,當用戶沒有指定,編譯器將這個值添加到函數調用。只有當特定的默認行爲是直觀的時才使用它們。

它有時可以作爲函數重載的替代方法。上面的例子中的作用也已被

void fun(); 
void fun(int value); 

實現但這意味着你必須執行fun兩次(其中fun()只是調用fun(0))。