左辺値参照宣言子: &
オブジェクトのアドレスを保持しますが、オブジェクトのように構文的に実行されます。
type-id & cast-expression
解説
lvalue 参照は、オブジェクトの別名と考えることができます。 左辺値参照の宣言は、参照宣言子が続く指定子のオプションのリストから構成されます。 参照は初期化する必要があり、変更できません。
アドレスを特定のポインター型に変換できるオブジェクトは、類似した参照型にも変換できます。 たとえば、アドレスを char * 型に変換できるオブジェクトは、char & 型にも変換できます。
参照の宣言とアドレス演算子の使用を混同しないでください。 & identifier の前に int や char などの型が指定されている場合、identifier は型への参照として宣言されています。 & identifier の前に型を指定しない場合、使用方法はアドレス演算子と同じです。
使用例
次の例は、Person オブジェクトの宣言による参照宣言子と、そのオブジェクトへの参照を示します。 rFriend は myFriend への参照であるため、いずれかの変数を更新すると同じオブジェクトが変更されます。
// reference_declarator.cpp
// compile with: /EHsc
// Demonstrates the reference declarator.
#include <iostream>
using namespace std;
struct Person
{
char* Name;
short Age;
};
int main()
{
// Declare a Person object.
Person myFriend;
// Declare a reference to the Person object.
Person& rFriend = myFriend;
// Set the fields of the Person object.
// Updating either variable changes the same object.
myFriend.Name = "Bill";
rFriend.Age = 40;
// Print the fields of the Person object to the console.
cout << rFriend.Name << " is " << myFriend.Age << endl;
}