関数の返り値として参照型を返し、既存のオブジェクト(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;
}