这两个C ++函数的区别

时间:2014-03-20 15:36:00

标签: c++ function

考虑:

template<class T1, class T2>
class pair
{
    private:
        T1 a;

    public:
        T1 & first(){return a;}
        T1 first() const{return a;}
}

这两个&#34;第一个&#34;之间的区别是什么?功能?他们什么时候使用?

5 个答案:

答案 0 :(得分:4)

  

这两个“第一”功能有什么区别?什么时候使用?

当对象T1 first() const合格时,将调用第一个(const),当对象返回时,将返回a,另一个(T1 & first())的副本没有const限定,并会返回对a的引用。

举个例子:

pair<int, int> x;
const pair<int, int> y;
x.first(); // T1 & first()
y.first(); // T1 first() const

答案 1 :(得分:3)

第一个返回对a的引用,第二个返回a的副本并声明为const。这意味着,只要你有一个类pair的对象,如果没有声明对象const,则会调用第一个,如果没有,则调用第二个。

然而,恕我直言的标准方式是使用它来避免复制:

T1 & first(){return a;}
const T1 & T1 first() const{return a;}

PS:你的代码中缺少一个分号。

答案 2 :(得分:1)

第一个是返回引用,因此您可以直接访问a。如果您对返回值执行操作,则您将对实例中的a采取行动。

代码味道,打破封装。

第二个返回a副本。因为你无法改变实例中的a,所以函数可以是const,即你可以在类的常量实例上调用它(你不能用第一个函数)。

我假设模板声明中的t1(sp!)是拼写错误,对吧?应该是T1

答案 3 :(得分:0)

带const的那个是const函数,它返回一个a的副本。第二个是非const,并返回对。

的引用

如果通过const引用将对传递给函数,则无法调用非const版本。

答案 4 :(得分:0)

T1 & first(){return a}

返回对T1类型的'a'对象的引用。更改返回的对象将更改从其返回的对象内的对象。

T1 first() const{return a;}

返回'a'的副本。对返回的对象进行更改不会更改从中复制的对象。