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
很容易),但返回副本并不总是一个好主意,甚至不可能。