質問は、10 個の整数の配列を作成することです。これで問題ありません
int array[10];
今質問は
上で宣言しreferenceたものを作る方法は?array
私はこれを試しました
int &ra = a;
しかし、それは私にエラーを与えています...このエラーの詳細referenceとarray.
int (&ra)[10] = a;
または、次のように、typedef を使用して、これを「10 個の int の配列」の型に分離し、そこへの参照を持つことができます。
typedef int int10[10];
int10& my_ref = a;
あなたの問題は、を参照するint &ra = a;型の参照を作成するようにコンパイラに指示することです...それらは同じものではありません。これは、10 の配列のサイズの 10 分の 1 であると考えてください。異なる量のメモリを占有します。参照の型で要求したことは、 のように特定の文字によって満たされる可能性があります。intarray of 10 intssizeof(int)intint& ra = a[0];
許可されているのは少し紛らわしいですint* p = a;が、タイプセーフではないCとの互換性のために、配列サイズに関する情報を保持していないにもかかわらず、ポインターを使用して単一の要素または配列にアクセスできます。これが、参照を好む理由の 1 つです。参照は、ポインターよりも安全性と機能性を少し追加します。
増加した機能の例として、配列sizeof(my_ref)内のバイト数( )を取得して取得できますが、ポインタのサイズ ( ) および. そして、関数内で使用するために配列次元を「キャプチャ」する次のようなコードを作成できます。int10 * sizeof(int)sizeof psizeof(int*)sizeof *p == sizeof(int)
template <int N>
void f(int (&x)[N])
{
std::cout << "I know this array has " << N << " elements\n";
}
配列への参照は type になりint (&a)[10]ます。
int array[10];
int (&a)[10] = array;
を使用して物事を少し単純化すると便利な場合がありますtypedef
typedef int (&ArrayRef)[10];
...
ArrayRef a = array;
これは、サイズ 10 の int の配列への参照です。
int (&ra)[10];
それで
int (&ra)[10] = a;