gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:08:43 25 4
gpt4 key购买 nike

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

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

最佳答案

那不是“构造函数初始化”,那是默认参数。它允许调用者提供比函数更少的参数,未指定的参数将采用默认值。

另一种方法是:

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;
};

也允许使用少于两个参数,但调用不同的构造函数(具有几乎相同的行为)。

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

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

关于C++模板构造函数初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5560363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com