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
时,你不能返回非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
引用返回给const
。const
成员函数在访问变量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; }
};
相关文章:
- 链接器错误:函数的多个定义
- 编译器错误:函数调用在常量表达式中必须有一个常量值
- 错误:函数声明符之后的预期函数体
- C 错误 - 函数不能超载
- 如何修复传递参数时调用错误函数的主函数?(C++)
- 错误:函数调用中有两个参数
- 错误:函数不是“类”的静态数据成员 - C++
- C ,G 编译错误函数
- CMake 解析错误函数缺少结尾")"。而是找到带有文本的未终止字符串")
- C++ 错误 函数 2 的多重定义
- 错误:函数调用中从int到int(*)[4]的转换无效
- C++14 自动扣除错误:函数返回一个数组
- 视觉C++错误:函数必须返回一个值
- 错误:函数声明中的两种或多种数据类型
- 错误:函数未在作用域中声明
- rtw_android.c错误:函数“strnicmp”的隐式声明[-Weror=隐式函数声明]
- 错误:函数中的return语句没有值,返回“void*”[-fpermission]
- 简单程序中的链接器错误:函数的多重定义
- 错误:函数参数太多
- 错误:函数__tmaincrtstartup中引用的未解析的外部符号_main