什么是T const&意味着返回类型的功能?

时间:2014-01-18 10:39:03

标签: c++ const

以下函数原型具有哪种返回类型?

int const& myfunctionname(int i)

我没有使用const和&这里。如果我返回对象/数组/基本上是非局部变量,如果我想返回对象的位置,我应该使用指针还是引用?

2 个答案:

答案 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++()

相关问题