在模板上使用() - 操作器

Using ()-Operator on Templates

本文关键字:操作器      更新时间:2023-10-16

我无法通过谷歌搜索找到答案,因为我不知道该实际寻找什么。所以我偶然发现了这一点:

template<typename T>
class SkipList {
    public:
        SkipList() : max_level_(16) { 
            head = new Node(T(), max_level_);
    ...
}

我真的不知道T()的含义。我熟悉模板的概念(至少我对此有基本知识(,但是我从未见过在它们上使用((操作器。那么帽子确实在做吗?

正在做的是创建该类型的默认对象。根据对象的不同,这将意味着不同的事物,但是归功于当您想要那里的东西,但不特别关心它的含义时,您可以使用默认对象来获取具有通用值的对象。对于intdouble,它应该是0,但是对于更复杂的类型,例如string,它变成了诸如空字符串或所有属性的设置为0。这是类中具有默认构造函数的部分原因。

std::cout << int() << " " << std::string() << " " << double();

输出:

0  0 

int()创建默认的 int(零(。

using Ptr = void*; Ptr()创建默认的 void*(a nullptr(。

std::string()创建默认的 std::string(一个空字符串(。

您看到了模式吗?

T()创建一个默认的 T,并适用于可以创建对象而无需传递任何参数的每种类型。如果Tint,则获得零int。如果Tvoid*,则获得nullptr。如果Tstd::string,则获得一个空字符串。等等。