gpt4 book ai didi

c++ - 从 const 方法调用成员的非常量方法

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:06:35 24 4
gpt4 key购买 nike

我很惊讶地发现“常量”中的这个“洞”:

#include <stdio.h>

class A
{
int r ;
public:
A():r(0){}

void nonconst()
{
puts( "I am in ur nonconst method" ) ;
r++;
}
} ;

class B
{
A a ;
A* aPtr ;

public:
B(){ aPtr = new A() ; }

void go() const
{
//a.nonconst() ; // illegal
aPtr->nonconst() ; //legal
}
} ;

int main()
{
B b ;
b.go() ;
}

所以基本上从 const 方法 B::go(),你可以调用 non-const 成员函数(恰如其分地命名为 nonconst()) 如果 A 类型的对象被指针引用。

这是为什么呢?似乎是个问题(它在我的代码中,我发现它的地方。)

最佳答案

时间和类型的对象B是 const,那么它的所有成员都是 const,这意味着它的两个成员是,持续时间为 B::go() , 有效地

A const a;
A * const aPtr;

第一个是 A 类型的常量对象,您只能在其上调用 const 成员函数。然而,第二个是指向非常量 A 的常量指针。 .你不能合法地说 aPtr = <anything>来自函数 B::go() ,因为那会修改 aPtr ,这是不变的。

指向常量的指针 A将被声明为 A const* aPtrconst A* aPtr ,然后调用非常量 A::nonconst()非法。

关于c++ - 从 const 方法调用成员的非常量方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8556794/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com