使用引用修改Const对象
const object modification using reference
当一个函数将参数作为reference
到const 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!
}
相关文章:
- 被解释为低级别const的const对象的地址
- 在 C++ 中声明 const 对象需要用户定义的默认构造函数.如果我有一个可变成员变量,为什么不呢?
- Google Or-Tools Glop:如何创建指向 const 对象的指针数组?
- 我们可以有一个 setter 成员函数作为从 const 对象引用的 const 吗?
- "this"指向的对象是否与 const 对象相同?
- 从 const 对象访问非 const 方法
- 将非 const 对象用于 const 参数
- 如何键入用于const对象的自定义io操纵器
- 哪个 const 与哪个引用将更改参数并创建一个 const 对象?
- 无法在返回中转换 const 对象
- 接受对 const 对象的引用但没有 r 值的函数
- 当我调用 main 中使用 const 对象的 const 函数时,不断出现错误
- 在 const 对象上调用非 const 函数
- 正确的方法通过巨大的const对象的向量
- 如何重载 const 对象的 [],以便值赋值不会导致编译错误
- 相互引用的 Const 对象
- 析构函数是否可以在 const 对象上调用非 const 函数
- decltype 不会推断 const 对象的 const 成员
- 防止const函数被调用非const对象
- constexpr引用非const对象