模板typename初始化

时间:2014-10-16 15:29:23

标签: c++ templates initialization typename

template<typename Dati>
class NodoVettore
{
private:
  Dati valore;
public:
    NodoVettore()
    {
        valore = Dati();
    }

    NodoVettore(Dati nuovoValore)
    {
        valore = nuovoValore;
    }
};

两个NodoVettore()构造函数之间的区别是什么? 为什么我应该使用Dati()而不是经典的初始化? 为什么我们在typename Dati之后有括号:

  

valore = Dati()

1 个答案:

答案 0 :(得分:1)

你的第一个构造函数是一个默认的构造函数,从你向我们展示的内容,它只是将一些名为valore的(我假设的)成员变量赋给Dati类型的默认构造对象。

你的第二个构造函数是一个转换构造函数(我的术语,不是标准的),它接受一个Dati类型的对象并将它分配给你的成员变量。我将其称为转换构造函数,因为它未标记explicit关键字。

你在默认构造函数中需要Dati之后的括号的原因是因为这就是构造对象的方式。

我希望这会对你有所帮助,但我建议你写一本关于C ++的好书,它涵盖了这些基础知识等等。