我想確保這個方法調用是正確的。我有三個參數,一個默認爲空的QString。C++默認參數值
double funcApply(double* param, QString expr=NULL);
並且呼叫是
funcApply(param);
在功能體,我測試第二個參數EXPR是否爲NULL或沒有,和accrodingly繼續。這個調用是否按預期行事,或行爲不當?
感謝和問候。
我想確保這個方法調用是正確的。我有三個參數,一個默認爲空的QString。C++默認參數值
double funcApply(double* param, QString expr=NULL);
並且呼叫是
funcApply(param);
在功能體,我測試第二個參數EXPR是否爲NULL或沒有,和accrodingly繼續。這個調用是否按預期行事,或行爲不當?
感謝和問候。
這取決於你期望的行爲。
從技術上講,expr
不會是NULL
,因爲它不是指針,但其內容將爲空。 (假設你的意思是QString)。
當然,如果你有類似#define QString char*
,那麼expr
將NULL
,但我懷疑你有這樣的。
對於'QString',有一個特殊的模式,你可以用空指針構造它。請參閱[文檔](http://qt-project.org/doc/qt-4.8/qstring.html#distinction-between-null-and-empty-strings)。 – leftaroundabout 2012-04-23 14:21:57
@leftaroundabout這是我發佈的鏈接。正是我說的 - 但expr不是NULL。它不能是因爲它不是一個指針。 – 2012-04-23 14:22:40
是的,但空字符串不是空字符串,這是我的觀點。 (我編輯了該部分的鏈接)。 – leftaroundabout 2012-04-23 14:23:29
我有錯誤,「來重載函數不明確調用」默認參數的重新定義「在編譯時
出於某種原因,你不允許一旦它被賦予重複默認參數。如果你在你的頭文件中的默認值,如:
double funcApply(double* param, QString expr=NULL);
實現必須不再重複了,但要像
double funcApply(double* param, QString expr /*=NULL*/)
{
// do something
}
如果實際測試的expr
參數NULL
和做兩不同的東西,你可能有兩個單獨的函數做這些「不同的事情」
double funcApply(double* param);
double funcApply(double* param, QString expr);
和避免這個問題更好。
QString是一個指針嗎? – Andrey 2012-04-23 14:18:48
你是否真的試圖運行它? – 2012-04-23 14:19:29
我在編譯時有錯誤:'重新定義默認參數'和'模糊克萊爾重載函數' – octoback 2012-04-23 14:27:12