2012-04-23 193 views
0

我想確保這個方法調用是正確的。我有三個參數,一個默認爲空的QString。C++默認參數值

double funcApply(double* param, QString expr=NULL); 

並且呼叫是

funcApply(param); 

在功能體,我測試第二個參數EXPR是否爲NULL或沒有,和accrodingly繼續。這個調用是否按預期行事,或行爲不當?

感謝和問候。

+0

QString是一個指針嗎? – Andrey 2012-04-23 14:18:48

+1

你是否真的試圖運行它? – 2012-04-23 14:19:29

+0

我在編譯時有錯誤:'重新定義默認參數'和'模糊克萊爾重載函數' – octoback 2012-04-23 14:27:12

回答

2

這取決於你期望的行爲。

從技術上講,expr不會是NULL,因爲它不是指針,但其內容將爲空。 (假設你的意思是QString)。

當然,如果你有類似#define QString char*,那麼exprNULL,但我懷疑你有這樣的。

+0

對於'QString',有一個特殊的模式,你可以用空指針構造它。請參閱[文檔](http://qt-project.org/doc/qt-4.8/qstring.html#distinction-between-null-and-empty-strings)。 – leftaroundabout 2012-04-23 14:21:57

+0

@leftaroundabout這是我發佈的鏈接。正是我說的 - 但expr不是NULL。它不能是因爲它不是一個指針。 – 2012-04-23 14:22:40

+0

是的,但空字符串不是空字符串,這是我的觀點。 (我編輯了該部分的鏈接)。 – leftaroundabout 2012-04-23 14:23:29

0

我有錯誤,「來重載函數不明確調用」默認參數的重新定義「在編譯時

出於某種原因,你不允許一旦它被賦予重複默認參數。如果你在你的頭文件中的默認值,如:

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); 

和避免這個問題更好。