给出以下代码:
#include <iostream>
template <std::size_t N>
struct foo
{ static std::size_t value; };
template <>
std::size_t foo<0>::value = 0u;
template <size_t N>
std::size_t foo<N>::value = 1u + foo<N - 1u>::value;
int main()
{
std::cout
<< foo<3u>::value << ' '
<< foo<2u>::value << ' '
<< foo<1u>::value << ' '
<< foo<0u>::value << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
在递归地初始化value模板结构的静态成员的地方foo,我从g ++得到了不同的输出:
3 2 1 0
Run Code Online (Sandbox Code Playgroud)
和从c ++++:
1 1 1 0
Run Code Online (Sandbox Code Playgroud)
看来g ++ foo<N>::value使用foo<N-1u>::valueclang ++对0使用零的初始化值来递归初始化foo<N-1u>::value。
两个问题: …