原則の実現のC ++標準ライブラリ関数の終了(非型テンプレートパラメータ)

「C ++入門」機能の終わりを学習の最初に遭遇し、私は非常に不思議な感じが、非常に混乱:なぜテールポインタの配列を取得しますか?コンパイラは、メモリ内のスペースのために適用され、ああ配列の要素数を入れないだろう!もう一度、最近私は、それが最終的に理解して実現を見て、その最後に会いました。

配列の要素数を取得するには、C言語では、以下の方法で起動します。

[] = {1,2 ,. 3}は、ARR int型、
サイズ_t = N-はsizeof(ARR)/はsizeof(INT); // n個の要素の数であります

sizeof定数式を返し、戻り値はコンパイル時に決定されます。すなわち、コンパイル時に知ることができる配列の長さです

 

C ++標準ライブラリの最後に実装(キー部分を:テンプレートパラメータおよびパラメータNの非種類の機能を)見て:

//コンパイラは、代わりに、コンパイル時の配列内の要素の数Nに基づいて、それによってテンプレートインスタンス化されます
テンプレート<型名T、size_tのN> 
インラインconstexprの終了T *(T(&ARR)[N]を){//があるため、コピーすることはできませんアレイは、アレイは、基準のパラメータ定義
	戻りARR + Nを; //ポインタと整数N(配列の要素数)が追加され、テール・ポインタのアレイARRを戻すように
}

テンプレートのパラメータリストのNが非型テンプレートパラメータである、テンプレート引数はコンパイル時定数式で決定されるタイプではありません。Nは、非テンプレートパラメータであるので、パラメータは、コンパイル時にアレイで(上述のように、アレイのコンパイル時間の長さで決定することができる)、コンパイラ配列型への関数端(長さN)の参照であります初期長N. 最後ARRすなわちNとテールポインタ配列を付加しました。

おすすめ

転載: www.cnblogs.com/yuanyb/p/11402831.html