使用引用修改const对象

时间:2011-12-28 22:22:45

标签: c++ object reference const

当一个函数将一个参数作为reference加到const object时,我明白作为参数传递给它的对象不能使用reference修改?那么在C ++中是否有任何场景可以通过引用来修改const object?如果是,请举一个例子。

2 个答案:

答案 0 :(得分:4)

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
}

我收到以下错误:

In function 'int main()':
Line 12: error: assignment of data-member 'Foo::a' in read-only structure
compilation terminated due to -Wfatal-errors.

然而,作业g.b = 2;成功。

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

答案 1 :(得分:1)

您始终可以使用const丢弃const_cast - ness;如果你不小心,这可能导致不明确的行为。

我想你也可以设法做这样的事情:

class Foo
{
private:
    mutable int x;

public:
    void bar() const { x++; }
};

void func(const Foo &foo)
{
    foo.bar();
    // foo is now modified!
}