配列への参照

配列への参照 #

概要 #

前ページまでで,配列へのポインタ,特に配列型へのポインタ型について説明しました.ここで,配列型へのポインタ型とは,そのポインタ型の変数に対して * 演算子で値を得ると,要素ではなく,配列そのものが得られるようなポインタ型を指すものとします.本ページでは,配列型への参照型について説明します.

配列型への参照型 #

クラス T の要素数 N の配列型へのポインタ変数 p_arr の宣言は,

using p_arr_t = T (*)[N];

または,

using arr_t = T[N];
using p_arr_t = arr_t *;

として定義できるのでした.

ここで,

using arr_ref_t = T (&)[N];

または,

using arr_t = T[N];
using arr_ref_t = arr_t&;

とすると,配列型への参照型 をつくることができます.

これを利用すると,前ページで説明した ArraySize 関数テンプレートを参照型で定義できるため,呼び出し側で & をつけずに利用できるようになります.

具体的には,以下のようにできます.

#include <cstddef>
#include <iostream>

template <class T, std::size_t N>
std::size_t ArraySize(T (&)[N]) {
  return N;
}

int main() {
  int arr[100];
  std::cout << ArraySize(arr) << "\n"; // 100

  double arr2[1024];
  std::cout << ArraySize(arr2) << "\n"; // 1024

  return 0;
}

まとめ #

本ページでは,配列型への参照型が定義できることを説明しました.配列型へのポインタ型でなく,配列型への参照型を利用すると,前ページの ArraySize 関数テンプレートの呼び出し方を,少しだけ簡単にできます.


This work is licensed under CC BY 4.0