我們什麼時候應該使用默認參數?什麼是正確的語法,他們不應該在哪裏使用?經常使用他們的好習慣還是壞習慣?他們影響效率嗎?使用默認參數健康習慣還是壞習慣?
-4
A
回答
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)
)。
相關問題
- 1. ruby默認參數習慣用法
- 2. 空旗是壞習慣嗎?
- 3. 是mysql_connect頭部壞習慣?
- 4. Scrum Master的壞習慣
- 5. Class scope typedef壞習慣?
- 6. 使用幻數是好習慣嗎?
- 7. 是否將php.ini的session.auto_start設置爲1認爲是壞習慣?
- 8. hjkl習慣破壞 - 軟版本
- 9. 第二組狀態回調 - 壞習慣?
- 10. 爲什麼重寫window.onresize壞習慣?
- 11. 習慣的方法
- 12. 習慣在Objective-C
- 13. php - RAII好習慣?
- 14. 習慣的方法
- 15. 這是使用iframe的好習慣嗎
- 16. 使用地圖進行Java 8流的習慣性使用習慣?
- 17. 在網站主頁上使用flash是否被認爲是壞習慣?
- 18. 在被認爲是壞習慣的Perl子程序中使用標籤?
- 19. 具有默認值的Array.reduce的CoffeeScript習慣用法
- 20. 嵌套是否與慣用Rust中的不良習慣匹配?
- 21. 從其他函數調用函數還是作爲數組的參數調用好/壞習慣?
- 22. 週期性參考不良習慣?
- 23. 使用strconv.ParseInt和ints的習慣用法
- 24. 使用過濾器的習慣用法()
- 25. 過度依賴預處理器是否是一個壞習慣?
- 26. 這個習慣uialertview呢?
- 27. 多線程的好習慣
- 28. Dockerfile結束的好習慣?
- 29. 標準編碼習慣
- 30. 習慣和Facebook登錄
參照這個網站。非常明確的解釋。 http://www.learncpp.com/cpp-tutorial/77-default-parameters/ –
這很正常。如果你不想使用默認參數。你必須重寫函數。 – billz
@billz:超載。 –