c++ const函数错误

C++ const function error

本文关键字:错误 函数 const c++      更新时间:2023-10-16

我对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时,你不能返回非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需要有所保留,它会破坏类的封装,并允许通过您分发的引用更改类的内部。

您不能将非const引用返回给constconst成员函数在访问变量x时使其非const

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