1

関数が構造体情報を持たない可能性はありますか? このようなもの int f(int x,int y=1)と f(2) の呼び出しは問題int f(int x,struct my_struct &y) ありませんが、これが参照であることを考えると、正しい方法は何ですか?

4

1 に答える 1

2

const参照であるため、一時オブジェクトであるデフォルト値にバインドすることはできません。次のように、一時的でないオブジェクトにバインドできます。

my_struct obj;
int f(int x, my_struct& y = obj) {
  // ...
}

しかし、これは、2 番目の引数なしで を呼び出すたびfに、同じ にアクセスできることを意味しますobjobj彼らはそれぞれそれを変更することができ、次は異なる状態の を受け取ります。これは、デフォルト値としてはあまり一般的ではありません。毎回同じデフォルト値を持つことが期待されます。

constオブジェクトを渡さないことが可能であるのに、なぜあなたの関数は非参照によってオブジェクトを取るのでしょうか? const変更するオブジェクトを呼び出し元に渡してもらいたい場合は、非参照を取ります。

y代わりに、パラメーターを参照にする方が理にかなっている場合がありますconstconst呼び出し元にオブジェクトを渡してもらい、それをコピーしたくない場合は、参照を取ります。次に、次のように一時オブジェクトにバインドできます。

int f(int x, const my_struct& y = my_struct(1, 2, "some args")) {
  // ...
}
于 2013-02-27T20:48:44.583 に答える