使用引用修改Const对象

const object modification using reference

本文关键字:Const 对象 修改 引用      更新时间:2023-10-16

当一个函数将参数作为referenceconst object时,我理解作为参数传递给它的对象不能使用reference修改?那么,在c++中是否有任何场景可以通过引用来修改const object ?是,请举例

c++有一个叫做mutable的特性,即使通过const引用:

也可以改变数据成员
class Foo {
public:
    int a;
    mutable int b;
};
int main() {
    Foo f;
    f.a = 1; // ok
    f.b = 2; // ok
    const Foo &g = f;
    g.a = 1; // compile error
    g.b = 2; // ok
}

我得到以下错误:

<>之前在函数int main()中:第12行:错误:在只读结构中分配数据成员'Foo::a'编译由于-Wfatal-errors而终止。之前

然而,赋值g.b = 2;成功。

此特性通常仅用于private成员变量,其中数据成员的更改不会影响对象的外部可见const-ness。例如,它可以用作一种优化,提供一种缓存先前计算值的方法。

您总是可以使用const_cast抛弃const -ness;如果不小心,这可能会导致未定义的行为。

我想你也可以这样写:

class Foo
{
private:
    mutable int x;
public:
    void bar() const { x++; }
};
void func(const Foo &foo)
{
    foo.bar();
    // foo is now modified!
}