C++ 为什么从常量函数c+的主体中调用非常量函数+;?

C++ 为什么从常量函数c+的主体中调用非常量函数+;?,c++,constants,C++,Constants,考虑以下代码,在这种情况下,输出为: f非常量 常数 这有点令人困惑,因为someClass正在从其const函数调用const数据成员的non-const函数: #include <iostream> using namespace std; class Inner { public: void f() const { cout<< "f const" <<endl; } void f() { cout<< "f non con

考虑以下代码,在这种情况下,输出为:

f非常量
常数

这有点令人困惑,因为someClass正在从其const函数调用const数据成员的non-const函数:

#include <iostream>
using namespace std;

class Inner
{
public:
    void f() const { cout<< "f const" <<endl; }
    void f() { cout<< "f non const" <<endl; }
};

class someClass
{
    Inner * const obj2;
public:
    someClass():obj2(){}
    void g() {obj2->f(); cout<< "g non const" <<endl; }
    void g() const {obj2->f(); cout<< "g const" <<endl; }

};

int main()
{
    const someClass a;
    a.g();
}
#包括
使用名称空间std;
班级内部
{
公众:

void f()const{cout我想你是在问为什么调用
void Inner::f()
。这是因为你有一个
const
指针指向非const
Inner

Inner * const obj2;
如果需要指向
常量内部的指针,则需要

const Inner * obj2;

如果需要指向
const
内部的
const
指针

const Inner * const obj2;
我会让你想出另一个选择。

答案如下:

someClass类中的obj2是一种内部*const类型,这意味着指针是const,而不是数据本身,因此它调用的是非const函数

要获得预期的输出,必须以以下方式声明obj2:

Inner const * obj2;

因为
*obj2
不是常量。你至少应该发布这个程序的输出。问题中提到了输出。好的,我改进了格式,使它更加突出。
Inner const * obj2;