c ++中的const参数和const方法

时间:2014-08-27 13:35:37

标签: c++ const

我有一个这样的课程:

class MyClass
{
    const int GetValue()
    {   
        return 2;
     }
}

我将它传递给这样的函数:

void Test(const MyClass &myClass)
{
   int x=myClass.GetValue();
}

但是我收到了这个错误:

The object has type qualifiers that are not compatible with member function Object type is const MyClass

我知道如果我定义这样的函数:

void Test( MyClass &myClass)

但我想知道为什么添加const会产生这样的错误?

3 个答案:

答案 0 :(得分:8)

您需要创建成员函数const,而不是返回类型:

int GetValue() const;

这使得可以在const实例(或通过const引用或指针)上调用此成员。

注意:当您按值返回时,返回的东西的常量与返回它的对象的常量分离。实际上,您不太可能希望返回类型为const

答案 1 :(得分:1)

将int设置为const,尝试将方法设为const:

const int GetValue() const
{   
    return 2;
}

答案 2 :(得分:1)

有两个问题,一个可见性问题(你的const int GetValue()函数自私有后是不可见的)以及你正在调用非const函数(它可以对具有它的对象执行修改)成员函数)

const int GetValue()

从对类的持续引用

const MyClass &myClass

你基本上要求“这个对象不会被修改,反正让我调用一个不保证这个的函数”。

你没有连贯。