#include <vector>
#include <iostream>
using namespace std;
static const int NOT_FOUND = -1;
template <class sequence, class T>
int binarySearch(sequence& seq, int low, int high, T& item)
{
//..
}
template <class sequence, class T>
int binarySearch(const sequence& seq, const T& item)
{
if (seq.size() == 0)
return NOT_FOUND;
return binarySearch(seq, 0, seq.size() - 1, item);
}
int main()
{
vector<int> t1 = {0, 3 ,45, 94};
cout << binarySearch(t1, 0);
//binarySearch(t1, 0, t1.size() - 1, 45);
return 0;
}
为什么编译器不接受:
template <class sequence, class T>
int binarySearch(sequence& seq, T& item)
此外,为什么程序如所述编译,但调用
binarySearch(t1, 0, t1.size() - 1, 45);
从main编译?
编译错误在任何情况下都是&#34;没有匹配函数来调用&#39; binarySearch&#39;。
答案 0 :(得分:2)
问题是你不能将临时对象绑定到非const引用。
binarySearch(t1, 0);
^---- this is a temporary
如果您将0
存储在变量中并使用了non-const version would work。
§8.5.4
- 否则,如果T是引用类型,则T引用的类型的prvalue临时值是copy-list-initialized或direct-list-initialized,具体取决于引用的初始化类型,并且引用被绑定到那个临时的。 [注意:像往常一样,如果引用类型是非const类型的左值引用,则绑定将失败并且程序格式错误。 - 注意