c++ - 常量函数由非常量对象调用。为什么?

标签 c++ constants member-functions const-correctness this-pointer

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

myClass.h

#ifndef MYCLASS_H
#define MYCLASS_H

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

#endif

myClass.cpp

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

void myClass::function() const{
    cout<<"this is a constant object";
}

main.cpp

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

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

    return 0;
}

请帮帮我。 谢谢

最佳答案

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

请注意,如果您有 function() 的非常量重载,则会调用该重载。

关于c++ - 常量函数由非常量对象调用。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53365348/

相关文章:

c++ - 是否有一种巧妙的方法来避免覆盖模板基类的所有纯虚函数,用于多重继承

c++ - 什么是boost log,如何获取以及如何构建

c++ - 使用 Delphi 调用 C++ dll

c++ - `const T* const` 是什么意思?

c++ - 模板成员函数仅在调用时实例化

c++ - const 成员函数和 typedef,C++

c++ - 变量 args SFINAE 默认构造函数在 clang 中工作,但在 Visual Studio 2015 中失败

c++ - 在哪里可以找到 STL 集合类中的 _M_key_compare 函数定义?

c++ - 如果我删除了 const,为什么这个使用 boost::shared_ptr 的调用不能在 C++ 中编译?

c++ - 值类型 const char 不能用于初始化 char* 类型的实体