奇怪的std::map构造函数用法

3
我搜索了 std::map 运行时排序的实现,并找到了这个解决方案:STL std::map dynamic ordering 对我来说很清楚,但我不明白如何在 std::map 的构造函数中使用 OrderingType。std::map 有一个构造函数,它以比较器对象作为参数。因此,从我的角度来看,使用以下代码是正常的:
int main()
{
   Ordering<int> test_ordering( ASCENDING );   
   CUSTOMMAP map1( test_ordering );

   return 0;
}

但是上述主题的代码也可以编译:
int main()
{
   CUSTOMMAP map1( ASCENDING );
   //...
   return 0;
}

我不明白为什么它能工作:std :: map的构造函数不能接收OrderingType枚举类型的参数,而不是Ordering类对象本身。

我在这张图片中没有看到任何std::map - Robᵩ
我刚从上述主题中复制了一段代码块。也许,我应该完全引用它。我不知道,是将链接留下还是完全引用更好。 - Anton Kulev
1个回答

9
如果使用了不带explicit关键字的Ordering<int>构造函数来接收枚举类型,那么这个构造函数就被视为一个“转换构造函数”,在编译器需要将你的枚举类型转换为Ordering<int>类型时,它会自动插入这个构造函数。因此,编译器实际上执行以下操作:
CUSTOMMAP map1( ASCENDING );

将它转化为这样:
CUSTOMMAP map1( Ordering<int>(ASCENDING) );

这被称为隐式转换

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接