C ++のライブラリで関数を見つけましたが、渡されるパラメーターの型がわからないので、知識と理解が完全であるため、知っておくとよいでしょう。
私には、それらは関数ポインタの配列のように見えますが、* がなければ、私の仮定は正しいでしょうか?
template < typename _Tp , size_t _Nm >
inline void swap ( _Tp ( & __a ) [ _Nm ] , _Tp ( & __b ) [ _Nm ] )
C ++のライブラリで関数を見つけましたが、渡されるパラメーターの型がわからないので、知識と理解が完全であるため、知っておくとよいでしょう。
私には、それらは関数ポインタの配列のように見えますが、* がなければ、私の仮定は正しいでしょうか?
template < typename _Tp , size_t _Nm >
inline void swap ( _Tp ( & __a ) [ _Nm ] , _Tp ( & __b ) [ _Nm ] )
両方の引数のタイプは同じです。_Nm
これらは、各要素の型がである長さの配列への参照_Tp
です。要素のタイプと配列の長さは、両方の引数で一致する必要があります。次の例では、これらの引数のタイプとarrRefのタイプの類似性を考慮してください。
int arr1[] = {1, 2, 3, 4, 5};
int (&arrRef)[5] = arr1; // arrRef is a reference to arr1
たとえば、次のような場合です。
int arr1[] = {1, 2, 3, 4, 5};
int arr2[] = {6, 7, 8, 9, 10};
swap(arr1, arr2);
のバージョンをswap
署名付きでインスタンス化しますvoid swap(int (&)[5], int (&)[5])
。
オブジェクトの type_Tp
と sizeの配列への参照です_Nm
。
C または C++ 型を読み取る正しい方法は、宣言が使用を反映していることです。 _Tp ( & __a ) [ _Nm ]
は、その型の変数を指定すると、__a
を書き(__a)[n]
、 を使用して0 <= n < _Nm
、 型のオブジェクトを取得できることを示しています_Tp
。型修飾子の存在は、修飾子&
と同様に機能し*
ます。as として宣言された変数は、_Tp ( * __a ) [ _Nm ]
と書くことができるため、配列へのポインターになります(*__a)[n]
。