0

なぜこれが正しいのか不思議です。戻り値は参照型int&ですが、h()関数intは文中の値型を返しますreturn xintでは、戻り値はどのようにに変化するのint &でしょうか?

これはコード スニペットで、C++ コンパイラで正常にコンパイルされます。

int& h() {
 int q;
 static int x;
 return x;
}
4

3 に答える 3

4

これは static への参照を返しますint。はx、関数hが最初に呼び出されたときに初期化されます。次のように使用します。

int& href = h();
++href; // increments the static variable
int& href2 = h(); // another reference to the same static variable

変数qは何の効果もないはずであり、疑わしいと思います。

于 2012-04-12T13:06:13.927 に答える
1

The reference means that you're actually returning effectively the same variable so changing the value of what was returned will directly alter the value of x If the code had been writtten:

int h()
{
    int q;
    static int x;
    return x;
}

(i.e. not be reference) then you'd be returning a copy of the value of x (although you should to be fair check out Return Value Optimization.) Returning a reference is efficient, however, there are times (multi-threading being an obvious example) where it can be undesirable and confusing.

于 2012-04-12T13:28:42.957 に答える
1

int&intへの参照です。xは整数です。したがってreturn x;、 を返す関数からint&への参照が返されますx

また:

関数の終了時にローカル変数が破棄されるため、ローカル変数への参照を返すことは危険です。参照を取得するまでに、それが参照するものは存在しません。これはダングリング参照と呼ばれ、何も指していないポインターのようなものです。

静的変数はローカル変数ではなく、関数が終了しても破棄されません。したがって、参照は取得時に有効なオブジェクトを指しています。

于 2012-04-12T13:32:41.707 に答える