为什么这个语句"priority_queue <pair<int,int>,vector<pair<int,int> >compare>pq;"在C++
Why this statement `priority_queue <pair<int,int>, vector<pair<int,int> >,compare>pq;` is an error in C++03 but correct in C++11?
以下代码片段声明了类型 pair<int,int>
的priority_queue,并使用类比较器并在 C++11 中更正,但在 C++03 中显示错误。原因是什么?
class compare
{
public:
bool operator () (pair<int,int>&p1,pair<int,int>&p2)
{
return p1.second > p2.second;
}
};
priority_queue <pair<int,int>, vector<pair<int,int> >,compare>pq;
C++03 编译器显示:
- 错误:"模板类 std::p riority_queue"的模板参数使用本地类型"main()::compare" priority_queue , 向量>,比较>pq;
- 错误:尝试实例化"模板类 std::p riority_queue"
在 C++11 之前,不可能将本地类型作为模板参数传递。
这就是 C++03 编译器拒绝代码的原因。
如果您使用的是现代编译器,则可以将其翻转到 C++11 或 C++14 模式。
否则,你就不走运了。
[C++11: C.2.6]:
第14条:模板[..]
14.6.4.2
改变:允许使用内部链接
调用函数的依赖函数 理由:过度约束,简化重载解决规则。
对原始特征的影响:有效的 C++ 2003 程序可能会得到与本国际标准不同的结果。
相关文章:
- 为什么在全局范围内使用"extern int a"似乎不行?
- int(c) 和 c-'0' 之间的区别。C++
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 为什么野牛仍在使用"int yylex(void)",却找不到"int yylex(YYS
- 有符号的int和int-有没有一种方法可以在C++中区分它们
- 请解释这句话(cout<<1+int((a<b)^((b-a)&1) )<<endl
- 是否可以从int转换为enum类类型
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 向量 <int> a {N, 0} 和 int arr a[N] = {0} 的时间复杂度有什么区别
- 'short int'持有的值溢出,但"自动"不会溢出?
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 调用'begin(int [n])'没有匹配函数
- 没有显式声明的int[]中的foreach
- 在c++中访问int到类对象的映射时出错
- 为什么我无法更改"set<set>"循环中的值<int>
- EASTL矢量<向量<int>>连续的
- 为什么将此对向量&lt; map&lt; int,int&gt;&gt;中的地图进行更新.失败
- 如何加入向量&lt; int&gt;到C 中的单个INT
- 是numeric_limits&lt; int&gt; :: is_modulo从逻辑上矛盾
- 'structstd::对<int,int>'没有名为'push_back'