我不明白我什么时候想要返回一个函数的引用(即T& func(){...}
)。什么时候你会返回一个函数的引用?
例如:
T& func() {
Something t;
return t;
}
这将创建一个名为t
一个Something
实例,然后通过引用返回。当我们超出范围时,t
丢失。所以参考是指0
我认为..?
换句话说,为什么我会想要返回一个引用或一个const引用?请解释并举例说明。
我不明白我什么时候想要返回一个函数的引用(即T& func(){...}
)。什么时候你会返回一个函数的引用?
例如:
T& func() {
Something t;
return t;
}
这将创建一个名为t
一个Something
实例,然后通过引用返回。当我们超出范围时,t
丢失。所以参考是指0
我认为..?
换句话说,为什么我会想要返回一个引用或一个const引用?请解释并举例说明。
当您从某个函数的参数中返回成员时,通常会这样做。从标准库的一个例子:
template<class T, size_t n>
struct array
{
T data[n];
T& operator[](size_t i) { return data[i]; }
};
有时你返回到一个函数中定义一个静态变量的引用:
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
}
你能想到的引用只是指针而已。每当你从函数返回一个指针时,你可能会返回一个引用类型。
我认为你的问题与返回引用是范围的问题。只要没有范围问题,它就是您可以使用的另一种工具。
返回对当前对象的引用用于实现用户定义的赋值运算符。
class Foo
{
Foo& operator=(const Foo&);
//...
};
实现运营商+=
,-=
,*=
等的过载时,它也可以用来作为返回类型,这些运营商表明,返回类型为调整后的当前对象,而不是一个新的对象。因此,要返回当前对象,请返回对*this
的引用。
对函数中定义的静态变量返回引用并不少见。成员函数也经常返回引用。每当引用是一个持续时间比该函数更长的对象时,如果这是有意义的。 – Galik 2014-10-05 23:42:33
另一个例子是max。请仔细关注样本实施中的返回类型http://www.cplusplus.com/reference/algorithm/max/ – 2014-10-05 23:51:01
参考文献如何神奇地开始参考“0”?那有什么意思? – 2014-10-06 00:04:00