【问题标题】:Use of const pointer to class in function在函数中使用指向类的 const 指针
【发布时间】:2013-07-18 09:13:36
【问题描述】:

我在代码中大量使用 std::shared_ptr。我有一些我想使用“this”从 MyClass 调用的函数,因此将这些函数声明为(例如)

int AnotherClass::foo(const MyClass *obj)
{
} 

我希望 const 明确 obj 不会改变,因为我传递了一个原始指针。 但是在 foo 里面我有

int AnotherClass::foo(const MyClass *obj)
{
    int number = obj->num_points()-1;
}

我的编译器抱怨“对象具有与成员函数不兼容的类型限定符”。 num_points 是一个简单的 get 函数,在头文件中声明和定义:

class MyClass {
public:
  ...
  int num_points(){return _points.size();}
  ...
private:
  std::vector<MyPoint> _points;
};

解决这个问题的最佳方法是什么?显然我可以摆脱 foo 中的 const 要求,但我喜欢它强加的刚性。 非常感谢!

【问题讨论】:

    标签: c++ constants shared-ptr


    【解决方案1】:

    使那个成员函数const:

    int num_points() const // <---
    {
        return _points.size();
    }
    

    这样您就可以在const 对象上调用它。养成这样的习惯,对每个不改变对象状态的函数进行限定。

    【讨论】:

      【解决方案2】:

      也将 num_points 声明为 const:

      int num_points() const
      {
          return _points.size();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-10-18
        相关资源
        最近更新 更多