C++;常数函数误差 我在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; } #包括 使用名称空间std; cls类 {int x; 公众: cls(inti=3){x=i;} int&f()常量{return x;} }; int main() { 常数cls a(-3); intb=a.f(); cout

C++;常数函数误差 我在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; } #包括 使用名称空间std; cls类 {int x; 公众: cls(inti=3){x=i;} int&f()常量{return x;} }; int main() { 常数cls a(-3); intb=a.f(); cout,c++,function,class,oop,constants,C++,Function,Class,Oop,Constants,由于函数声明为const,除非将其标记为可变,否则无法返回对成员变量的非const引用 要修复代码,请编写 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;} con

由于函数声明为
const
,除非将其标记为
可变
,否则无法返回对成员变量的非
const
引用

要修复代码,请编写

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
引用作为可变的

要修复代码,请编写

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
需要谨慎对待,它会破坏类的封装,并允许通过您分发的引用更改类的内部结构。

您不能将非
常量
引用返回到
常量
常量
成员函数生成变量
x
常量
访问时

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

不能将非
常量
引用返回到
常量
常量
成员函数在访问变量时使变量
x
常量

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

^^^^^胡说八道!@BatCoder所以,它将返回对所述变量的引用。这可能是什么的重复:
const cls a(-3);
cls(int i=3){x=i;}
另一方面,是您的代码。使用了什么编译器来编译此代码?^^^^^^^^^^胡说八道!@BatCoder因此,它将返回对所述变量的引用。这可能是重复的:
const cls a(-3);
cls(int i=3){x=i};
另一方面,是您的代码。使用了什么编译器来编译此代码?int f()常量{return x;}也ok@KenmanTsang是的,在这种情况下它是可以的,事实上,它可能是可取的(复制
int
很容易)。但是返回副本并不总是一个好主意,甚至不可能。int f()const{return x;}ok@KenmanTsang是的,在这种情况下是可以的,事实上,这可能是可取的(复制
int
很容易),但返回副本并不总是一个好主意,甚至不可能。