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]。