これは単に、関数の結果に何かを割り当てることができることを意味します。この例を考えてみましょう。
int& foo() {
static int x;
return x;
}
void bar() {
foo() = 42;
}
int
もちろん、の代わりに、これはクラスオブジェクトでも機能します。x
重要なのは、呼び出し元に参照を返すことで、でローカルスコープの変数を直接割り当てることができるということfoo
です。これは、参照の戻り値が「左辺値を作成する」と著者が言っていることを意味します。
ちなみに、この例には実際にアプリケーションがあります。これは、より複雑なタイプの静的初期化順序の大失敗int
を解決するためです。
編集
「メリット」については、これを解釈する方法がいくつかあります。これは、コードを読みやすくする方法(ポインターで実装された同じ機能とは対照的)であるか、左辺値にのみ適用できる操作を使用できる方法です。これは、参照を返さない場合は不可能です。ポインタが引数を受け取りました:
struct X {
int a;
int b;
};
class Y_withoutRefs {
private:
X x;
public:
void setXa(int a) {
x.a = a;
}
int getXa() {
return x.a;
}
void setXb(int b) {
x.b = b;
}
int getXb() {
return x.b;
}
};
class Y_withRefs {
private:
X x;
public:
X& getX() {
return x;
}
};
void dosmth() {
Y_withoutRefs ywo;
Y_withRefs yw;
ywo.setXa(50+ywo.getXa());
yw.getX() += 50;
}