私はこのような機能を持っています:
int insert(std::string, std::string, std::map<std::string, std::string>&)
3 番目の引数は参照であるため、この引数に既定のパラメーターを与える正しい方法は何ですか?
私が望むのはstd::map<std::string, std::string>& = VAL
、デフォルトで設定し、その VAL がデフォルト値でない場合にのみマップを使用することです。
右辺値は非 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);
引数、特に最初の引数以外を変更する関数は、設計がかなり悪く、グローバル変数はさらにそうであることを警告する必要があります。
非 const 参照を渡す場合は、それを変更したいためであり、左辺値を渡します。あなたのテキストから、あなたがマップを変更したいと考えていますが、条件付きでのみです。その場合、標準的なイディオムは、nullptr
( C++11 より前の場合はNULL
or ) をデフォルトの引数としてポインタを渡すことです。この場合、何もしません。0