在 const 方法中调用非 const 方法[重复]

Posted

技术标签:

【中文标题】在 const 方法中调用非 const 方法[重复]【英文标题】:Calling non const method in const method [duplicate] 【发布时间】:2019-09-05 09:30:26 【问题描述】:
#include <iostream>
#include <memory>

class B

  public:
  B()

  void g()  
;

class A

 public:
 A()
 
    ptr_ = std::make_shared<B>();  
 

 void f() const 
 
    ptr_->g(); // compile
    //obj_.g(); // doesn't compile as expected
 

 std::shared_ptr<B> ptr_;
 B obj_;
;

int main()

  A a;
  a.f();

我很惊讶这段代码构建得很好。在 A::f() 中,我调用数据成员的非常量方法。当此数据成员是它构建的指针时,如果它不是指针,它不会按预期构建,因为 B::g() 是非常量的。

你明白为什么我可以在 const 函数中调用非 const 函数吗?

【问题讨论】:

为什么不能?你调用另一个类的非常量方法。 【参考方案1】:

重点是const成员函数中的const,指针是谁?指针?

const成员函数fptr_中,即指针本身被认为是const,而不是它所指向的对象。你在指针上调用非常量成员函数g,就可以了。

此外,您不能对指针ptr_ 本身(与obj_ 相同)进行任何修改(和调用非常量成员函数),例如ptr_ = std::make_shared&lt;B&gt;();;但是你可以在它指向的对象上这样做,比如*ptr_ = B;

【讨论】:

以上是关于在 const 方法中调用非 const 方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥非 const 方法是私有的时不调用公共 const 方法?

使用const_cast创建非const变量的方法

const函数

const形参与非const形参

C++ 非 const 右值参数解决方法

防止 const 类函数在引用成员上调用非 const 类函数