我不明白何时我想要从函数返回引用(即T& func(){...}
)。
例如:
T& func() {
Something t;
return t;
}
这会创建一个名为Something
的{{1}}实例,然后通过引用返回它。当我们超出范围时,t
将丢失。所以引用是指t
我认为......?
换句话说,为什么我想要返回引用或const引用?请解释并举例说明。
答案 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
。