関数が構造体情報を持たない可能性はありますか? このようなもの
int f(int x,int y=1)
と f(2) の呼び出しは問題int f(int x,struct my_struct &y)
ありませんが、これが参照であることを考えると、正しい方法は何ですか?
質問する
66 次
1 に答える
2
非const
参照であるため、一時オブジェクトであるデフォルト値にバインドすることはできません。次のように、一時的でないオブジェクトにバインドできます。
my_struct obj;
int f(int x, my_struct& y = obj) {
// ...
}
しかし、これは、2 番目の引数なしで を呼び出すたびf
に、同じ にアクセスできることを意味しますobj
。obj
彼らはそれぞれそれを変更することができ、次は異なる状態の を受け取ります。これは、デフォルト値としてはあまり一般的ではありません。毎回同じデフォルト値を持つことが期待されます。
const
オブジェクトを渡さないことが可能であるのに、なぜあなたの関数は非参照によってオブジェクトを取るのでしょうか? const
変更するオブジェクトを呼び出し元に渡してもらいたい場合は、非参照を取ります。
y
代わりに、パラメーターを参照にする方が理にかなっている場合がありますconst
。const
呼び出し元にオブジェクトを渡してもらい、それをコピーしたくない場合は、参照を取ります。次に、次のように一時オブジェクトにバインドできます。
int f(int x, const my_struct& y = my_struct(1, 2, "some args")) {
// ...
}
于 2013-02-27T20:48:44.583 に答える