関数の返り値として参照型を返し、既存のオブジェクト(C++)への別名を返す方法。 コピーを避けられることがあるが、返した参照先の生存期間(C++)には注意が必要である。

関数内で定義したローカル変数の参照を返すと、関数終了後にその変数が破壊されるため、ダングリング参照になる。 関数が抜けたあとも存在するオブジェクト(C++)だけを返すようにする必要がある。 必要なら、静的ローカル変数を返す方法がある。

非参照型で参照返しを受け取る

戻り値が参照であっても、コピーが作成されて渡される。

戻り値として参照を返す呼び出しの直接操作

例:非const参照を返す関数は、max(a, b) = 7;のように、直接値を代入できる。

#include <iostream>
#include <string>
 
const std::string& getProgramName() // returns a const reference
{
    static const std::string s_programName { "Calculator" }; // has static duration, destroyed at end of program
 
    return s_programName;
}
 
int main()
{
    std::cout << "This program is named " << getProgramName();
 
    return 0;
}