1

C ++のライブラリで関数を見つけましたが、渡されるパラメーターの型がわからないので、知識と理解が完全であるため、知っておくとよいでしょう。

私には、それらは関数ポインタの配列のように見えますが、* がなければ、私の仮定は正しいでしょうか?

template < typename _Tp , size_t _Nm > 
inline void swap ( _Tp ( & __a ) [ _Nm ] , _Tp ( & __b ) [ _Nm ] )
4

2 に答える 2

3

両方の引数のタイプは同じです。_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])

于 2012-11-05T11:03:07.407 に答える
2

オブジェクトの type_Tpと sizeの配列への参照です_Nm

C または C++ 型を読み取る正しい方法は、宣言が使用を反映していることです。 _Tp ( & __a ) [ _Nm ]は、その型の変数を指定すると、__aを書き(__a)[n]、 を使用して0 <= n < _Nm、 型のオブジェクトを取得できることを示しています_Tp。型修飾子の存在は、修飾子&と同様に機能し*ます。as として宣言された変数は、_Tp ( * __a ) [ _Nm ]と書くことができるため、配列へのポインターになります(*__a)[n]

于 2012-11-05T11:03:01.947 に答える