C++ 为什么从常量函数c+的主体中调用非常量函数+;?
考虑以下代码,在这种情况下,输出为: f非常量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
常数 这有点令人困惑,因为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
指针指向非constInner
:
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;