【问题标题】:Why calling non const function from in body of const function c++?为什么从 const 函数 c++ 的主体中调用非 const 函数?
【发布时间】:2014-04-20 19:01:22
【问题描述】:

考虑下面的代码,在这种情况下输出是:

f 非常量
g 常量

这有点令人困惑,因为 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 函数?

【问题讨论】:

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

标签: c++ constants


【解决方案1】:

我猜你在问为什么void Inner::f() 被调用。这是因为你有一个 const 指向非常量 Inner 的指针:

Inner * const obj2;

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

const Inner * obj2;

Inner const * obj2;

如果你想要一个指向 const 内部的 const 指针,

const Inner * const obj2;

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

【讨论】:

    【解决方案2】:

    答案如下:

    someClass类中的obj2是Inner * const类型,表示指针是const,不是数据本身,所以调用的是非const函数。

    要得到预期的输出,obj2 必须这样声明:

    Inner const * obj2;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-17
      • 2013-09-28
      • 2011-06-27
      • 1970-01-01
      • 1970-01-01
      • 2011-11-09
      • 1970-01-01
      • 2010-09-29
      相关资源
      最近更新 更多