模板分辨率过载
Overloaded template resolution
本文关键字:分辨率 更新时间:2023-10-16
下面的代码打印"First"。为什么选择了第一个模板,而第二个模板似乎更专业,应该更匹配?(我使用MSVC10)
我知道这在某种程度上与第二个模板接受const &
的参数有关,但仍然不知道为什么这会使它的匹配更差。
#include <map>
#include <iostream>
template<class Range>
void go(Range &r)
{
std::cout << "First" << std::endl;
}
template<class K, class V>
void go(const std::map<K, V> &m)
{
std::cout << "Second" << std::endl;
}
int main()
{
std::map<int, int> m;
go(m);
}
编译器将第一个模板实例化到
void go(std::map<int, int>& r)
第二个是
void go(const std::map<int, int>& m)
第一个的转换序列是身份转换:无需执行任何操作,lvalue参数直接绑定到引用。
第二个的转换序列是限定符转换:左值参数需要添加常量才能绑定到引用。
所以第一个是更好的匹配。如果main
中的变量一开始是const,那么第二个将是更好的匹配,正如您在这里看到的,因为然后两个模板实例化为同一个东西,只有这样"更专业化"的概念才会发挥作用。
相关文章:
- 使用分辨率定理用Z3证明
- Alt+Enter 在 Win32 应用中,管理大小调整和分辨率
- Opencv 恢复到比我设置的更高的分辨率
- 在Windows(C++)中使用USB相机拍摄高分辨率照片
- C/C++ 位数组分辨率转换算法
- Windows 和 Linux 之间的相对路径分辨率差异?
- 如何在C++中为高分辨率时钟声明变量?
- 给定数字的浮点分辨率
- 过载分辨率和用户定义的转换
- QScreen geometry()api为分辨率2736 x 1824和2560 x 1600提供了错误的值
- 在没有NtSetTimerResolution的Windows上提高计时器分辨率(高分辨率)
- 获取可能的屏幕分辨率列表
- std::array<const T, n> vs std::array<T, n> 过载分辨率
- 模板转换运算符的分辨率不明确
- 将 X 坐标从一种分辨率转换为另一种分辨率
- 使用 gcc 的模糊函数过载分辨率.为什么?
- caffe 可以一次接收一批具有不同分辨率的输入吗?如果是这样,怎么办?
- 实现高分辨率计时器的最佳方法
- C++ 重载分辨率和恒常性
- 控制台分辨率程序不准确