3

質問は、10 個の整数の配列を作成することです。これで問題ありません

int array[10];

今質問は

上で宣言しreferenceたものを作る方法は?array

私はこれを試しました

int &ra = a;

しかし、それは私にエラーを与えています...このエラーの詳細referencearray.

4

4 に答える 4

12
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";
}
于 2012-10-26T06:28:29.347 に答える
3

配列への参照は type になりint (&a)[10]ます。

int array[10];
int (&a)[10] = array;

を使用して物事を少し単純化すると便利な場合がありますtypedef

typedef int (&ArrayRef)[10];
...
ArrayRef a = array;
于 2012-10-26T06:27:45.260 に答える
1

これは、サイズ 10 の int の配列への参照です。

int (&ra)[10];

それで

int (&ra)[10] = a;
于 2012-10-26T06:27:19.603 に答える