具有奇怪返回类型的结构

时间:2011-08-06 11:39:52

标签: c++

你能帮我解决这个问题吗?

struct b {
    Something bSomething;
    const Something & MySomething() const {
         return bSomething;
    }
};

我想知道为什么方法返回类型是const Something& 我认为它可能就像在

中那样简单
 Something MySomething() const {
         return bSomething;
    }

Something MySomething()  {
             return bSomething;
        }

谢谢

2 个答案:

答案 0 :(得分:3)

您不能在常量函数中向成员返回非常量引用。直接成员访问器通常的两个重载是这样的:

const Foo & foo() const { return m_foo; }
      Foo & foo()       { return m_foo; }

在常量函数中,this的类型为const T *(其中T是您的类)。你认为你的班级作为一个愚蠢的C结构一分钟,你正在返回*this->m_foo,但是当this是一个指向常量的指针时这是常数,所以你不能对它进行非常量的引用

按值返回很好,因为你调用Foo复制构造函数,它具有签名Foo(const Foo&) - 所以它可以从常量引用中复制:

Foo copy_foo() const { return m_foo; }  // calls Foo(*this->m_foo)

答案 1 :(得分:2)

这意味着返回的值不可编辑(第一个 const ,调用此方法不会以任何方式更改结构实例(第二个 const

第二个const非常有趣,因为你也可以在const值上使用它。 如果你遇到一个方法返回一个 const mytype& 的情况,只有当它们被声明为 const 时才可以调用方法(最后类似于之前的方法)。否则你不允许这样做。

如果省略第一个 const ,您将拥有一个可编辑的值。但是因为你通过const方法返回它(不会改变结构的东西,但返回类中的非const值可能会改变值<实例的/ em>,它无效的有效操作