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 类对象本身。

4

1 回答 1

9

如果使用Ordering<int>您的枚举的构造函数未声明为explicit,则它被视为“转换构造函数”,当编译器需要从您的枚举类型转换为该Ordering<int>类型时,可以自动插入该构造函数。所以编译器有效地采取了这个:

CUSTOMMAP map1( ASCENDING );

并将其转化为:

CUSTOMMAP map1( Ordering<int>(ASCENDING) );

这称为隐式转换

于 2012-04-05T19:42:08.990 回答