在模板上使用() - 操作器
Using ()-Operator on Templates
本文关键字:操作器 更新时间:2023-10-16
我无法通过谷歌搜索找到答案,因为我不知道该实际寻找什么。所以我偶然发现了这一点:
template<typename T>
class SkipList {
public:
SkipList() : max_level_(16) {
head = new Node(T(), max_level_);
...
}
我真的不知道T()
的含义。我熟悉模板的概念(至少我对此有基本知识(,但是我从未见过在它们上使用((操作器。那么帽子确实在做吗?
正在做的是创建该类型的默认对象。根据对象的不同,这将意味着不同的事物,但是归功于当您想要那里的东西,但不特别关心它的含义时,您可以使用默认对象来获取具有通用值的对象。对于int
和double
,它应该是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
,并适用于可以创建对象而无需传递任何参数的每种类型。如果T
为int
,则获得零int
。如果T
是void*
,则获得nullptr
。如果T
是std::string
,则获得一个空字符串。等等。
相关文章:
- 迭代器的指针操作问题
- 使用双包装器类进行位操作(C++、clang)修复性能下降问题
- 为什么指针在由后增量比较器操作时行为不同?
- 打印矩阵后分割错误,但在打印额外行后修复(ostream <<操作器)
- 如何监控Android和iOS上的所有击键操作,如Windows键盘记录器
- 标准上的 OMP 和并行操作::set<...>::迭代器
- 在模板上使用() - 操作器
- 操作器 [] 作为非静态函数
- 错误:如果(object1 == object2),“操作器==”无匹配(操作数类型为“ const class”和“
- 过载复合"+="操作器作为自由功能
- C# * 和 & 操作器,用于指向数组
- 方括号和圆括号操作器,如何选择重载
- 为什么C 流操作器没有呼叫操作员
- 如何使C++endl操作器线程安全
- LNK 2019 尝试重载"<<"操作器时出错
- 编译器不使用移动 c'tor / 赋值操作器?
- 使用新操作器创建多个对象
- 过载小于不同类型的操作器
- Visual Studio 编译和检测操作器重载,而 g++ 没有
- 为什么这组自定义对象没有根据重载的操作器<进行排序