我有两个以不同方式定义的类,如下所示:

template<class T, size_t N = 100> class Stack {
  T data[N];
};

template<class T = int, size_t N = 100> // Both defaulted
class Stack {
  T data[N];
};

我想知道这是定义类的两种不同方法,还是它们具有不同的含义?

最佳答案

您的第一个Stack类没有第一个模板参数的默认值:

template<class T, size_t N = 100>

使用此类,您可以这样声明Stack:
Stack<int> stack; // You have to provide at least 1 template parameter
Stack<int, 50> stack;

您的第二个Stack类的第一个模板参数的默认值为int:
template<class T = int, size_t N = 100>

使用这个Stack类,您可以像这样声明一个Stack:
Stack<> stack; // You can declare a Stack with no template parameters
Stack stack; // The same, but C++17-only
Stack<int> stack;
Stack<int, 50> stack;

09-10 00:49
查看更多