|
分類:[C/C++]
make_integer_sequence<size_t , 5>( ); // {0,1,2,3,4}という値がコンパイル段階で生成される。 ところで、コンパイラーがどこで何に基づく、どのタイミングで上記数値sequenceを生成するのか、 知りたいです。
ソースコードを追跡してみたら、
make_integer_sequence -----> _Make_seq ------> integral_constant ------> integer_sequence
具体は下記の通り
template<class _Ty,_Ty _Size> using make_integer_sequence = typename _Make_seq<_Size < 0, _Size == 0, integral_constant<_Ty, _Size>, integer_sequence<_Ty> >::type;
template<class _Ty, _Ty... _Vals> struct _Make_seq<false, true, .....>
template<class _Ty,_Ty _Val> struct integral_constant
template<class _Ty, _Ty... _Vals> struct integer_sequence
{ static constexpr size_t size() _NOEXCEPT { return (sizeof...(_Vals));// get length of parameter list これだけは run-timeで実行される。 } };
さて、コンパイラーはどのタイミングで、どういうわけで {0, 1, 2, 3, 4} を生成するのでしょうか。
ぞうぞ宜しくお願いします。
|