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