3

私はこのようなことをしようとしました:

int& g(int& number = 0)
{
//maybe do something with number
    return number;
}

しかし、うまくいきません。参照渡しする必要があります。助けてくれてありがとう。

PSタイトルを入力すると「関連する質問」が表示されるのは良い考えだと思いますが、特定の言語に関連する場合にのみ表示する必要があると思います。問題はRubyです。

4

4 に答える 4

11

あなたが本当にこれをしたい場合:

  • 参照を const にして、一時的にバインドできるようにします
  • 定義ではなく、関数宣言にデフォルトを入れます

例えば:

// header
const int & g( const int & number = 0 );


// implementation
const int & g( const int & number )
{
//maybe do something with number
    return number;
}

PSここではなく、メタでSOがどのように機能するかについての苦情を投稿してください(それが行うすべてのことについて-この質問に答えると、リスト後のコードのバグがまだ修正されていないことが示されました)

于 2009-12-14T10:06:04.310 に答える
4

非定数参照があります。これは、参照を変更できることを意味します。ただし、デフォルトは定数0です。

この関数にデフォルトを設定することは本当に意味がありますか?

于 2009-12-14T10:07:57.533 に答える
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.

于 2009-12-14T12:27:03.023 に答える
0

非 const 参照は一時 (リテラル) にバインドできません。

ここでは、おそらく引数を取り、値で返し、結果を変数に代入するのは呼び出し元に任せるのが最も理にかなっています (必要な場合)。k = g(k);

おそらく、2 つのオーバーロードを使用することもできますが、「既定の」オーバーロードは参照によって返すことができないため、混乱が生じる可能性があります。

int& g(int&);

int g()
{ 
    int arg = 0;
    return g(arg);
}
于 2009-12-14T10:47:16.460 に答える