以下函数原型具有哪种返回类型?
int const& myfunctionname(int i)
我没有使用const和&这里。如果我返回对象/数组/基本上是非局部变量,如果我想返回对象的位置,我应该使用指针还是引用?
答案 0 :(得分:2)
这意味着您将返回对无法更改的值的引用。
如果您返回对局部变量的引用,那么您将遇到问题,因为它将引用不再存在的内容:
int const &GetValue()
{
int x = 10;
return x; // THIS IS BAD!
}
此外,将const引用返回到整数类型(int,long等)并没有多大意义,因为它们首先占用与引用几乎相同的空间。但是,如果你这样做,那不是什么大问题。
如果您要返回非本地数据(即成员数据),则在数据始终存在时使用引用,如果数据可能不存在则使用指针,以便NULL
表示数据不存在。例如:
const std::string &User()const
{
return m_Username;
}
int Age() const
{
return m_Age; // Pointless to use a reference here
}
const Person *Partner()const
{
return m_Parter; // User may not have a partner, so pointer
}
如果您不希望调用者能够修改返回的对象,请创建指针或引用const
。
答案 1 :(得分:1)
此类函数可以返回对其所属类的成员变量的引用,但调用函数将无法更改它。例如:
class Foo
{
public:
Foo() {boo=5;}
public:
int const& myfunctionname(int i) {boo += i; return boo;}
private:
int boo;
}
void func(Foo& foo)
{
const int& a = foo.myfunctionname(6);
a += 7; // Compilation error
int b = a+7; // OK
}
<强>补充:强>
通过引用返回常量值的最常见示例可能是operator++()
。