这个模板参数是什么意思?

ved*_*eda 2 c++ templates

对于下面的代码,是什么std::uint64_t = 0意思?

template< class T, std::uint64_t = 0 >
struct Dummy {  
   T value;
};
Run Code Online (Sandbox Code Playgroud)

cig*_*ien 5

它是 type 的非类型模板参数,std::uint64_t默认值为0

请注意,该参数是未命名的,因此您不能直接在Dummy.

但是,此模板参数仍有多种用途,例如,您可以为此参数使用不同的值来选择 的特化Dummy

// specialization
template< class T>
struct Dummy<T, 42> {
   // ... 
};
Run Code Online (Sandbox Code Playgroud)

现在Dummy<int>Dummy<int, 0>将使用主模板,但Dummy<int, 42>将使用部分特化。它的一个常见用途是在称为 SFINAE 的技术中。