访问分别返回副本和参考值的方法

时间:2018-12-16 14:12:00

标签: c++ templates reference copy

下面的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()的“其他版本”?

0 个答案:

没有答案