C++ const 函数错误

C++ const function error

我对 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 函数而崩溃。现在我不太确定那里发生了什么以及为什么它会崩溃,所以我需要有人来启发我一些关于这个问题的知识。

由于您的函数声明为 const,因此您不能 return 对成员变量的非 const 引用,除非您将其标记为 mutable

要修复您的代码,请编写

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

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

或return一个const参考。

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

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

使用 mutable 需要持保留态度,它会破坏 class 的封装,并允许通过引用更改 class 内部结构你发了。

您不能 return 对 const 的非 const 引用。 const 成员函数在访问变量 x 时使它成为非 const

似乎没有必要return引用,实际上这是一种不好的做法。如果您需要更改内部 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; }
};