为什么在const函数c ++的体中调用非const函数?

时间:2014-04-20 19:01:23

标签: c++ const

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

  

f non const
  g const

有点令人困惑,因为someClass从const函数调用const数据成员的非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();
}

为什么someClass在这种情况下调用非const函数?

2 个答案:

答案 0 :(得分:6)

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

Inner

如果你想要一个指向Inner * const obj2; 的指针,那么你需要

const Inner

const Inner * obj2;

如果你想要一个指向Inner const * obj2; 内部的const指针,

const

我会让你找出另一种选择。

答案 1 :(得分:1)

以下是答案:

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

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

Inner const * obj2;