我试图执行以下代码:
#include <iostream>
using namespace std;
class A
{
int x;
public:
A(int i = 25) { x = i; }
int &f() const { return x; }
};
int main()
{
A a(15);
cout << a.f();
return 0;
}
它创建一个名为a
的对象,其x
成员的值设置为15.但是,当我尝试调用该函数返回该值时,我收到一个错误。为什么会这样?
答案 0 :(得分:6)
你试图返回对x
的引用,这意味着什么
return可用于修改类对象中的x
。
但是,该方法是const
,这意味着不允许修改自己对象中的任何内容。
你看到了矛盾吗?
在没有引用的情况下返回正常值或删除const
答案 1 :(得分:2)
您正尝试从标记为const
的成员函数返回引用(可以修改),即它无法修改类实例。删除尾随const
,它将起作用。或者返回const
引用。
答案 2 :(得分:0)
const
成员函数不会修改内部成员。如果您返回对可以修改int&
的int x
的引用,那么您将有机会修改与之相矛盾的值。
答案 3 :(得分:0)
从返回类型中删除引用
int f() const { return x; }
此外,正确的构建方式是
A(int i = 25) : x(i) {} /// Initialization list