私はこのようなことをしようとしました:
int& g(int& number = 0)
{
//maybe do something with number
return number;
}
しかし、うまくいきません。参照渡しする必要があります。助けてくれてありがとう。
PSタイトルを入力すると「関連する質問」が表示されるのは良い考えだと思いますが、特定の言語に関連する場合にのみ表示する必要があると思います。問題はRubyです。
私はこのようなことをしようとしました:
int& g(int& number = 0)
{
//maybe do something with number
return number;
}
しかし、うまくいきません。参照渡しする必要があります。助けてくれてありがとう。
PSタイトルを入力すると「関連する質問」が表示されるのは良い考えだと思いますが、特定の言語に関連する場合にのみ表示する必要があると思います。問題はRubyです。
あなたが本当にこれをしたい場合:
例えば:
// header
const int & g( const int & number = 0 );
// implementation
const int & g( const int & number )
{
//maybe do something with number
return number;
}
PSここではなく、メタでSOがどのように機能するかについての苦情を投稿してください(それが行うすべてのことについて-この質問に答えると、リスト後のコードのバグがまだ修正されていないことが示されました)
非定数参照があります。これは、参照を変更できることを意味します。ただし、デフォルトは定数0です。
この関数にデフォルトを設定することは本当に意味がありますか?
あなたのイディオムは間違っています。
グローバル関数は、基本的に参照を返すべきではありません。たとえば、グローバル変数を非表示にする場合を除きます。その場合は問題ありませんが、使用法には疑問があります。変数がすでにグローバルである場合、なぜ関数呼び出しの背後に隠す必要があるのでしょうか。
あなたの目標が引数を変更することであるなら、なぜ戻り値を与えるのでしょうか? たとえば、古い値を返す場合にのみ役立ちます。これは、「参照」ではなく「値」で行う必要があります。
int g(int& arg) {
int oldarg( arg );
// maybe modify arg
// return old value of arg
return oldarg;
}
また:
const int& g(int& arg) {
static int accumulator;
accumulator += arg;
return accumulator;
}
後者の場合、参照によって引数を渡したり、参照によってアキュムレータを返したりする必要はありません。
乾杯、H.
非 const 参照は一時 (リテラル) にバインドできません。
ここでは、おそらく引数を取り、値で返し、結果を変数に代入するのは呼び出し元に任せるのが最も理にかなっています (必要な場合)。k = g(k);
おそらく、2 つのオーバーロードを使用することもできますが、「既定の」オーバーロードは参照によって返すことができないため、混乱が生じる可能性があります。
int& g(int&);
int g()
{
int arg = 0;
return g(arg);
}