我有两个功能。
int& abc()
const int& abc() const
这两个功能有什么区别?我有一个内部类的源代码,其中定义了这两个函数。 Aren这两个函数是否含糊不清,因为它们具有确切的定义?这两者究竟有什么区别?
答案 0 :(得分:3)
这是一个简单的程序,展示了两者之间的区别:
#include <iostream>
using namespace std;
class Foo {
int c;
public:
Foo() {
c = 1;
}
int abc() {
c++;
cout << "non-const, c = " << c << endl;
return c;
}
const int& abc() const {
//c++; // compile-error, can't modify in a const function
cout << "const, c = " << c << endl;
return c;
}
};
int main() {
const Foo foo1;
Foo foo2;
int a = foo1.abc();
int b = foo2.abc();
cout << "a = " << a << endl;
cout << "b = " << b << endl;
a++; b++;
cout << "a = " << a << endl;
cout << "b = " << b << endl;
cout << foo1.abc() << endl;
cout << foo2.abc() << endl;
}
输出
const, c = 1 non-const, c = 2 a = 1 b = 2 a = 2 b = 3 const, c = 1 1 non-const, c = 3 3
允许第一个函数修改成员变量c
,而第二个函数不能。根据{{1}}资格调用调用适当的函数。
通常会有一个与const
限定版本配对的功能。例如,请参阅const
的{{3}}。
答案 1 :(得分:0)
成员函数的const可以重载。因此,第二个成员函数重载第一个成员函数。它们的功能不同。一个是const而另一个不是。 当您声明类的常量对象时,这很有用。常量对象只能访问const成员函数。所以,你有一个为这种情况声明的const成员函数。
class MyClass {
int nr;
public:
MyClass (int value) : nr (value) {}
int& getNr () {return nr;} // this will be called by a non constant obj
conts int& getNr () const {return nr;} // this one will be
// called by a constant object
}
int main () {
MyClass foo (1);
const MyClass bar (2);
// Here int& getNr () {} will be called
cout << foo.getNr () << endl;
// And here const int& getNr () const {} will be called
cout << bar.getNr () << endl;
return 0;
}