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; }
};
我对 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; }
};