在 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
成员函数f
,ptr_
中,即指针本身被认为是const
,而不是它所指向的对象。你在指针上调用非常量成员函数g
,就可以了。
此外,您不能对指针ptr_
本身(与obj_
相同)进行任何修改(和调用非常量成员函数),例如ptr_ = std::make_shared<B>();
;但是你可以在它指向的对象上这样做,比如*ptr_ = B;
。
【讨论】:
以上是关于在 const 方法中调用非 const 方法[重复]的主要内容,如果未能解决你的问题,请参考以下文章