c ++模板构造函数初始化

sto*_*ird 5 c++

template<class T>
class Node
{
    public:
    Node(Node<T>* next=NULL, T data=T()) : _next(next), _data(data)
    {
    } 
    Node<T>* _next;
    T _data;
};
Run Code Online (Sandbox Code Playgroud)

我是c ++模板的新手.对于默认参数,是T data = T()标准方法吗?也许还T data = 0可以吗?

Ben*_*igt 7

这不是"构造函数初始化",这是一个默认参数.它允许调用者提供比函数少的参数,未指定的参数将采用默认值.

另一种方法是:

template<class T>
class Node
{
    public:
    Node(Node<T>* next, T data) : m_next(next), m_data(data) {} 
    Node(Node<T>* next) : m_next(next), m_data() {} 
    Node(void) : m_next(NULL), m_data() {} 

    Node<T>* m_next;
    T m_data;
};
Run Code Online (Sandbox Code Playgroud)

如果允许使用少于两个参数,则调用不同的构造函数(具有几乎相同的行为).

使用单独的重载有许多优点:

  • 如果data始终省略参数,则不需要复制构造函数.
  • 如果data始终提供参数,则不需要默认构造函数.

  • 有什么理由不将`T data`参数作为`const T&`? (2认同)