下面的C ++ Primer Plus代码创建了一个简单的Pair模板
#include <iostream>
#include <string>
template <class T1, class T2>
class Pair {
private:
T1 a;
T2 b;
public:
T1 & first();
T2 & second();
T1 first() const { return a; }
T2 second() const { return b; }
Pair(const T1 & aval, const T2 & bval) : a(aval), b(bval) { }
Pair() {}
};
template<class T1, class T2>
T1 & Pair<T1,T2>::first() { return a; }
template<class T1, class T2>
T2 & Pair<T1,T2>::second() { return b; }
困扰我的是first()和second()方法的工作方式,或者更好的是,为什么有2种不同的实现方式,一个实现返回对类T1 / 2的引用,另一个实现返回副本。
我确实知道传递引用和传递副本之间有什么区别,但是我应该如何访问一种方法或另一种方法?
示例:
Pair myPair(5,10);
cout << myPair.first();
将要调用哪个方法?一个返回T1引用还是返回一个副本?以及我怎么称呼first()的“其他版本”?