0

このメソッド呼び出しが正しいことを確認したいと思います。3 つの引数があり、そのうちの 1 つはデフォルトで null QString になります。

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

そして呼び出しは

funcApply(param);

関数本体では、第 2 引数 expr が NULL かどうかをテストし、順を追って処理を進めます。この呼び出しは期待どおりに動作しますか、それとも誤動作しますか?

ありがとうございます。

4

2 に答える 2

2

それは、あなたが期待する動作に依存します。

技術的には、ポインターでexprはないためNULL、そうではありませんが、その内容は空になります。(あなたがQStringを意味すると仮定します)。

もちろん、あなたが のようなものを持っているなら#define QString char*、それexprは になりますがNULL、あなたがそれを持っているとは思えません。

于 2012-04-23T14:19:17.403 に答える
0

コンパイル時に「デフォルトパラメーターの再定義」および「オーバーロードされた関数のあいまいな呼び出し」というエラーが発生します

何らかの理由で、既定の引数を一度指定すると、その引数を繰り返すことはできません。次のように、ヘッダー ファイルにデフォルト値がある場合:

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

実装はそれを繰り返すべきではありませんが、次のようなものでなければなりません

double funcApply(double* param, QString expr /*=NULL*/)
{
    // do something
}

exprパラメータを実際にテストしNULLて2つの異なることを行う場合、これらの「異なること」を行う2つの別々の関数を使用する方がよい場合があります

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

この問題を回避します。

于 2012-04-23T16:30:58.103 に答える