6.3w+
社区成员
下面这个程序只要改一个字符便能通过编译
#include <iostream>
#include <functional>
using namespace std;
class A
{
/*...*/
int i;
public:
A(int k) : i(k) {}
int get() const {return i;}
};
int isLess(const A& a, int c)
{
return a.get() < c;
}
int main()
{
A a(34);
cout << bind2nd(ptr_fun(isLess), 45)(a) << endl;
return 0;
}
虽然知道原因了 我总觉得这里有点混,又比如你在程序中使用greater<HugeClass>, 不知情的可能试图用HugeClass的引用 HugeClass& 来实例化此模板因为stl实现的greater<T>实际上是用const T&来传递参数的因此不必担心效率,反而程序员亲自操心的话会报错。我不知道这里面有什么原则准则来规范模板参数的含义没有?虽然可以用指针来代替引用消除上面的问题但我想如果编译器把 Type&&&... (一个或多个&)都解析为Type& 应该也不是什么难事。
请教一下意见谢谢!!!