【发布时间】:2017-10-03 23:54:54
【问题描述】:
在我看来,它们是相同的。但在 Visual Studio 2015 中,它们肯定是不同的。
//Ok, work properly
multiset<int, greater<int> > ms1;
ms1.insert(10);
ms1.insert(20);
//error, why?
multiset<int> ms2(greater<int>());
ms2.insert(30);
ms2.insert(40);
不知道为什么?
【问题讨论】:
-
不,它们不一样。是什么让您认为它们是相同的?
-
没有答案here?
-
@user0042:不是,不是。这个问题是关于对模板参数和函数/构造函数参数之间的区别缺乏理解。这是一个核心语言问题。真的不是关于
std::multiset,这只是他在误会出现时碰巧玩的玩具。 -
std::multiset将其第一个模板参数作为类型,将第二个模板参数作为比较函数。您不能将比较函数放在构造函数参数中。你明白什么是构造函数吗?这可能会给你一个很好的提示,说明为什么这看起来真的很奇怪,不应该混淆 -
@Benjamin 你可能是对的。