参照 (C++)References (C++)

参照は、ポインターと同じように、メモリ内の他の場所に位置するオブジェクトのアドレスを格納します。A reference, like a pointer, stores the address of an object that is located elsewhere in memory. 参照は、ポインターとは異なり、初期化された後で別のオブジェクトを参照するように指定したり、null に設定したりすることはできません。Unlike a pointer, a reference after it is initialized cannot be made to refer to a different object or set to null. 参照には2種類あります。左辺値参照は、名前付き変数を参照し、右辺値参照は一時オブジェクトを参照します。There are two kinds of references: lvalue references which refer to a named variable and rvalue references which refer to a temporary object. & 演算子は左辺値参照を示し、 && 演算子は右辺値参照、またはコンテキストに応じて、ユニバーサル参照 (右辺値または左辺値) を表します。The & operator signifies an lvalue reference and the && operator signifies either an rvalue reference, or a universal reference (either rvalue or lvalue) depending on the context.

参照は次の構文を使用して宣言できます。References may be declared using the following syntax:

[ストレージクラス指定子][ cv-修飾子]型指定子 [ ms-修飾子]宣言子 [ = ][storage-class-specifiers] [cv-qualifiers] type-specifiers [ms-modifier] declarator [= expression];

参照を指定する任意の有効な宣言子を使用できます。Any valid declarator specifying a reference may be used. 参照が関数または配列型への参照でない限り、次の簡略化された構文が適用されます。Unless the reference is a reference to function or array type, the following simplified syntax applies:

[ストレージクラス指定子][ cv-修飾子]型指定子 [ & または && ] [ cv-修飾子]識別子 [ = ];[storage-class-specifiers] [cv-qualifiers] type-specifiers [& or &&] [cv-qualifiers] identifier [= expression];

参照は次の順序で宣言します。References are declared using the following sequence:

  1. 宣言指定子:The declaration specifiers:

    • ストレージ クラスの指定子 (省略可能)。An optional storage class specifier.

    • 修飾子 (省略可能) const volatileOptional const and/or volatile qualifiers.

    • 型指定子: 型の名前。The type specifier: the name of a type.

  2. 宣言子: The declarator:

    • オプションの Microsoft 固有の修飾子。An optional Microsoft-specific modifier. 詳細については、「 Microsoft 固有の修飾子」を参照してください。For more information, see Microsoft-Specific Modifiers.

    • & 演算子または && 演算子。The & operator or && operator.

    • 省略可能な const and/ volatile 修飾子。Optional const and/or volatile qualifers.

    • 識別子。The identifier.

  3. 初期化子 (省略可能)。An optional initializer.

配列および関数へのポインターのより複雑な宣言子フォームは、配列および関数への参照にも適用されます。The more complex declarator forms for pointers to arrays and functions also apply to references to arrays and functions. 詳細については、「ポインター」を参照してください。For more information, see pointers.

1 つの宣言指定子の後のコンマ区切りリストに、複数の宣言子と初期化子を含めることができます。Multiple declarators and initializers may appear in a comma-separated list following a single declaration specifier. 次に例を示します。For example:

int &i;
int &i, &j;

次のように、参照、ポインター、およびオブジェクトをまとめて宣言できます。References, pointers and objects may be declared together:

int &ref, *ptr, k;

参照は、オブジェクトのアドレスを保持しますが、構文的にはオブジェクトと同様に動作します。A reference holds the address of an object, but behaves syntactically like an object.

次のプログラムでは、オブジェクトの名前 s とオブジェクトへの参照 SRef を、プログラム内で同じように使用できることに注意してください。In the following program, notice that the name of the object, s, and the reference to the object, SRef, can be used identically in programs:

Example

// references.cpp
#include <stdio.h>
struct S {
   short i;
};

int main() {
   S  s;   // Declare the object.
   S& SRef = s;   // Declare the reference.
   s.i = 3;

   printf_s("%d\n", s.i);
   printf_s("%d\n", SRef.i);

   SRef.i = 4;
   printf_s("%d\n", s.i);
   printf_s("%d\n", SRef.i);
}
3
3
4
4

関連項目See also

参照型関数の引数Reference-Type Function Arguments
参照型関数の戻り値Reference-Type Function Returns
ポインターへの参照References to Pointers