[C++]関数の引数として受け取る固定長配列の長さは指定可能である。

先の記事で配列型の扱いをいろいろ考えていた中で、ふと気がついた。一般に配列を受け取る関数は、配列引数を先頭要素へのポインタの形で受け取らざるを得ず、その配列の要素数を指定できないと思われている。確かに今や枯れ果てたC言語ではそうだった。が、実はC++であれば可能である。

//これはC言語仕様によりvoid print(char* a)と同じ。要素数は10でなくても動作してしまう。
void print(char a[10]) { printf(a); }
//これは"配列への参照"という特殊な型を要求しているため、要素数は10でなければならない。
void print(const char(&a)[10]) { printf(a); }

配列そのものではなく、配列への参照というC++特有の引数指定を行うと、どうやら要素数まできっちり判定してくれるようである。
私は単純な配列型が嫌いなのでこういうのは大抵std::arrayを使っており特に困ったことはないが、コードの文字数が多くなって鬱陶しいのも確かなので、人によっては役に立つテクニックかもしれない。