c++ - 在函数中使用指向类的 const 指针

标签 c++ constants shared-ptr

我在我的代码中大量使用 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 是一个在 header 中声明和定义的简单 get 函数:

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

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

最佳答案

使该成员函数const:

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

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

关于c++ - 在函数中使用指向类的 const 指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17719254/

相关文章:

c# - 通过asp.net从控制台读取输出

C++11:std::unordered_map<int, std::stack<int>> 从 map 中获取值而无需多次复制

ios - 从一个函数引用另一个函数中的常量

c++ - 在 C++ 中更轻松地使用共享指针的方法

c++ - 在按钮点击时控制 qt 中的循环

c++ - 在 while 循环中连接值出错

algorithm - 一种线性时间、恒定空间算法,用于查找列表中出现 1 次的元素

c++ - 对需要 const 引用的函数的整数输入

c++ - 如何通过 operator= 在 shared_ptr 中释放内存?

java - C++ shared_ptr 和 Java native 对象所有权