常量函数由非常量对象调用.为什么?

Rit*_*ena 3 c++ const const-correctness member-functions this-pointer

我是c ++的新手,面临着常量对象的问题.我已经声明了一个名为function的常量成员函数(并且我已经知道常量函数只能由常量对象调用)但是这里常规对象调用一个常量对象.请解释为什么会这样.代码就在这里

myClass.h

#ifndef MYCLASS_H
#define MYCLASS_H

class myClass
{
    public:
        void function() const;  
};

#endif
Run Code Online (Sandbox Code Playgroud)

myClass.cpp

#include "myClass.h"
#include<iostream>
using namespace std;

void myClass::function() const{
    cout<<"this is a constant object";
}
Run Code Online (Sandbox Code Playgroud)

main.cpp中

#include <iostream>
using namespace std;
#include "myClass.h"

int main() {
    myClass obj;
    obj.function();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

请帮帮我.谢谢

jua*_*nza 6

这就是C++的工作方式.可以在非const对象上调用const成员函数,因为const的正确性不能被破坏.不行的是在const对象上调用非const成员函数.

请注意,如果您有非const重载function(),那么将调用它.


cur*_*guy 5

正如我所了解到的,一个常量函数只能被一个常量对象调用

不!

这是周围的其他方法

  • const 成员函数承诺只读取对象,因此即使无法更改也可以调用它;
  • 非 const 成员函数(假设称为“MF”)可以读取和修改对象,因此:

    • 它也不能从 const 成员函数(假设称为“CMF”)调用:由函数调用的函数(此处为“CMF”)不应该破坏所做出的承诺,而“MF”则有破坏承诺的风险;
    • 不能在 const 对象上调用它,该对象在构造完成时和销毁之前都是常量(在构造过程中,声明为 const 的对象还不是常量,因为构造函数需要对其进行设置)。

所以const 限定的成员函数可以应用于任何对象;限制在于这些 const 成员函数可以调用的内容。