0

私はこのような機能を持っています:

int insert(std::string, std::string, std::map<std::string, std::string>&)

3 番目の引数は参照であるため、この引数に既定のパラメーターを与える正しい方法は何ですか?

私が望むのはstd::map<std::string, std::string>& = VAL、デフォルトで設定し、その VAL がデフォルト値でない場合にのみマップを使用することです。

4

2 に答える 2

3

右辺値は非 const 一時にバインドされません。

しかし、デフォルトが理にかなっている場合は、おそらくそれを変更していません。その場合、それを const にすると、std::map<std::string, std::string>()デフォルト値として問題なく機能します。すなわち:

int insert(std::string x, std::string y,
           const std::map<std::string, std::string> &m =
                   std::map<std::string, std::string>())

非 const 参照が本当に必要な場合は、ローカル変数を渡す引数を 1 つ持つオーバーロードを作成するだけです。

広告コメント: わかりました。グローバル変数をデフォルト引数として渡すことができます。単に

int insert(std::string x, std::string y,
           std::map<std::string, std::string> &m = GLOBAL_map);

引数、特に最初の引数以外を変更する関数は、設計がかなり悪く、グローバル変数はさらにそうであることを警告する必要があります。

于 2013-08-19T12:14:39.880 に答える
0

非 const 参照を渡す場合は、それを変更したいためであり、左辺値を渡します。あなたのテキストから、あなたがマップを変更したいと考えていますが、条件付きでのみです。その場合、標準的なイディオムは、nullptr( C++11 より前の場合はNULLor ) をデフォルトの引数としてポインタを渡すことです。この場合、何もしません。0

于 2013-08-19T13:01:53.460 に答える