【问题标题】:C++ Const Member Function (Beginner)C++ 常量成员函数(初级)
【发布时间】:2016-09-05 03:37:43
【问题描述】:

在 C++ Primer P259 中,它说

为 const 的对象,以及指向 const 对象的引用或指针, 只能调用 const 成员函数。

然而,根据我目前的理解,指向 const 对象的指针不一定适用,因为指针本身是非常量的。只要成员函数不修改所指向的对象,就可以在指向 const 对象的指针上调用非常量成员函数。
对吗?

编辑:好的,我现在明白了,这是因为当我们“调用指针上的成员函数”时,我们实际上是先取消引用它,然后使用下面的对象。

【问题讨论】:

  • 不,不是。报价是正确的。我不知道你为什么认为指针的 const-ness 具有任何意义。
  • the member function does not modify the object being pointed to:你的意思是像const 函数,或者只是碰巧避免修改任何东西的非const 函数?
  • "因为指针本身是非常量的" 这意​​味着您可以更改指针。不是它指向的东西。
  • @juanchopanza 是的,那么对于这样的指针,为什么只能调用const成员函数呢?
  • 因为它是一个指向 const 的指针。如果你可以调用非 const 成员,它就不是指向 const 的指针。

标签: c++ member-functions


【解决方案1】:

引用是正确的。

试试这个

class TestClass
{
public:
  void nonconst(){};

  void constMethod() const {}
};

int main()
{

  TestClass const *s = new TestClass();
  //s->nonconst(); // (1) no not legal
  s->constMethod();

  s = new TestClass(); // (2) yes legal
  s->constMethod();
}
  1. s 是一个指向常量的指针。调用非 const 方法会导致

将“const TestClass”作为“this”参数传递会丢弃限定符 [-fpermissive]

  1. 但是 s 可以指向不同的实例。正如在 cmets 中所说,指针可以指向不同的变量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    相关资源
    最近更新 更多