你能帮我解决这个问题吗?
struct b {
Something bSomething;
const Something & MySomething() const {
return bSomething;
}
};
我想知道为什么方法返回类型是const Something& 我认为它可能就像在
中那样简单 Something MySomething() const {
return bSomething;
}
和
Something MySomething() {
return bSomething;
}
谢谢
答案 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>,它无效的有效操作