13

私はこれを理解することができませんでした。2 つの ctor を作成するのは簡単ですが、これを行う簡単な方法があるかどうかを知りたいと思いました。

std::mapaをデフォルトのパラメーターとして ctor に渡すにはどうすればよいですか。

Foo::Foo( int arg1, int arg2, const std::map<std::string, std::string> = VAL)

0null、およびNULLasを試しましたがVAL、すべて int 型であるため、g ++ が文句を言います。ここで使用する正しいデフォルトは何ですか?

それとも、この種のことは良い考えではありませんか?

4

4 に答える 4

28

の正しい表現はVALですstd::map<std::string, std::string>()。長くて見苦しいと思うので、クラスに public typedef メンバーを追加すると思います。

class Foo {
public:
  typedef std::map<std::string, std::string> map_type;
  Foo( int arg1, int arg2, const map_type = map_type() );
  // ...
};

ところで、コンストラクタの最後の引数が参照になるということでしたか? const map_type&だけよりもおそらく優れていconst map_typeます。

于 2010-11-08T22:35:57.080 に答える
6

値で初期化された一時を作成します。例えば:

Foo::Foo(int arg1,
         int arg2,
         const std::map<std::string, std::string>& the_map =
             std::map<std::string, std::string>())
{
}

(typedef は、コードでこれを読みやすくするのに役立つ場合があります)

于 2010-11-08T22:33:28.680 に答える
2

まず、接線で言えば、マップをconst valueで渡していますが、これは無意味であり、おそらく本当に必要なものではありません。マップのコピーを作成せず、関数がマップを変更しないようにするために、おそらくconst 参照で渡したいと思うでしょう。

ここで、デフォルト パラメータを空のマップにしたい場合は、次のように構築して行います。

Foo::Foo( int arg1, int arg2, const std::map<std::string, std::string>& = std::map<std::string, std::string>())
于 2010-11-08T22:35:21.780 に答える