考虑以下代码,在这种情况下输出为:
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函数?
答案 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;