你何时会从函数返回一个引用?

时间:2014-10-05 23:40:18

标签: c++ function reference

我不明白何时我想要从函数返回引用(即T& func(){...})。

例如:

T& func() {
    Something t;
    return t;
}

这会创建一个名为Something的{​​{1}}实例,然后通过引用返回它。当我们超出范围时,t将丢失。所以引用是指t我认为......?

换句话说,为什么我想要返回引用或const引用?请解释并举例说明。

4 个答案:

答案 0 :(得分:3)

当你从一个函数的参数中返回一个成员时,你经常会这样做。标准库中的一个示例:

template<class T, size_t n>
struct array
{
    T data[n];

    T& operator[](size_t i) { return data[i]; }
};

答案 1 :(得分:1)

有时您会返回对函数中定义的静态变量的引用:

T& func() {
    static Something t; // this will exist until program closes
    return t;
}

这是一种帮助解决涉及静态初始化顺序的问题的技术。

显然,成员变量是有意义的(我确定你不会问这些变量):

T& MyType::func() {
    return this->t; // persists with the object
}

有时您也希望返回传入函数的对象:

std::ostream& operaor<<(std::ostream& os, const MyType& t) {
    // blah blah
    return os; // pass it back out
}

这使您能够将功能链接在一起,如:

if(std::getline(input >> size >> std::ws, line))
{
    // size and line were successfully read here
}

答案 2 :(得分:0)

您可以将引用视为指针。只要您从函数返回指针,就可以返回引用类型。

我认为您返回引用的问题是范围问题。只要没有范围问题,它就是您可以使用的另一种工具。

答案 3 :(得分:0)

返回对当前对象的引用用于实现用户定义的赋值运算符。

class Foo
{
  Foo& operator=(const Foo&);
  //...
};

在实现运算符+=-=*=等的重载时,它也用作返回类型。这些运算符表明返回类型是调整后的当前对象,而不是一个新的对象。因此,要返回当前对象,请返回对*this

的引用