C ++ const函数错误

时间:2016-08-30 15:31:27

标签: c++ function class oop const

我对c ++中的oop很新,我在浏览网页时遇到了以下代码:

#include<iostream>
using namespace std;

class cls
{int x;
public: 
    cls(int i=3) {x=i;}

    int &f() const{ return x;}
};
int main()
{
    const cls a(-3);
    int b=a.f();
    cout<<b;
    return 0;
}

当我尝试运行代码时,它会因f函数而崩溃。现在我不太确定那里发生了什么以及为什么会崩溃,所以我需要有人在这个问题上给我一些启发。

2 个答案:

答案 0 :(得分:4)

由于您的函数已声明为const,因此除非您将其标记为const,否则无法向成员变量返回非mutable引用。

要修复代码,请写

class cls
{ 
    mutable int x;
 // ^^^^^^^
public: 
    cls(int i=3) {x=i;}

    int &f() const{ return x;}
};

或返回const引用。

class cls
{ 
    int x;
public: 
    cls(int i=3) {x=i;}

    const int &f() const{ return x;}
 // ^^^^^
};

使用mutable需要花费一些时间,它会破坏你的类的封装,并允许通过你发出的参考来改变你的类内部。

答案 1 :(得分:1)

您无法向const返回非const引用。 const成员函数在访问变量时xconst

似乎没有必要返回引用,事实上这是一个不好的做法。如果您需要更改内部int,则添加setter会更有意义:

class cls
{
    int x;
public: 
    cls(int i=3) { set(i); }
    void set (const int val) { x=val; }
    int f() const{ return x; }
};