c++ - 当 fun 是静态函数时,为什么我们需要在 decltype(&fun) 中添加 &?
问题描述
源代码:
static bool cmp(pair<int, int>& m, pair<int, int>& n) {
return m.second > n.second;
}
priority_queue<pair<int, int>, vector<pair<int, int>>, decltype(&cmp)> q(cmp);
当 fun 是静态函数时,为什么我们需要在 decltype(&fun) 中添加 &?
解决方案
decltype(cmp)
是一个函数类型。
对于标准库容器,Compare
类型(如果存在)必须是Swappable。功能不能交换,因此它们被排除在外。也就是说,当交换两个容器时,比较器类型会跟随对象本身进入它们的新容器。这对于函数类型是不可能的,因此可交换性要求隐含地禁止函数类型用作比较器。
在许多情况下,函数类型隐含地衰减为函数指针类型,这会让我们忘记它们是不同的类型。这是差异相关的情况之一。您可以将函数指针用作容器比较器 - 容器将在内部存储该指针的副本,并在交换容器时进行交换。你不能使用函数。
推荐阅读
- range - 如何从 SPARQL 中的范围中获取表达式的值
- sql - 使用 BigQuery 中的条件计算运行总计
- css - 为什么我的菜单项在桌面大小时不显示?
- git - 如何使用 GitHub API 从特定的提交哈希中获取文件?
- python - Python 中的 Jupyter 笔记本
- python - Python If None then check not None from other variables
- vue.js - 如何在 css 中更改 Vuetify v-icon 颜色
- javascript - HTML5 画布上的网格游戏
- kotlin - 来自 Android 设备的 Ktor 服务器上的信令错误
- jestjs - 使用通过 Webpack 使用 React 组件的玩笑运行时的编译错误