-2
我有两个函数。返回值之间的区别int&和const int&
int& abc()
const int& abc() const
这两个函数有什么区别?我有一个里面定义了这两个函数的类的源代码。这两个功能不是模棱两可的,因为它们有确切的定义?这两者之间的区别究竟是什么?
我有两个函数。返回值之间的区别int&和const int&
int& abc()
const int& abc() const
这两个函数有什么区别?我有一个里面定义了这两个函数的类的源代码。这两个功能不是模棱两可的,因为它们有确切的定义?这两者之间的区别究竟是什么?
下面是一个简单的程序展示在两者之间的区别是:第一功能被允许修改成员变量c
#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
,而第二个不能。根据const
资格认证调用适当的功能。
通常具有与const
合格版本配对的功能。例如,请参见operator[]
,关于std::vector
。
_“这两者之间究竟有什么区别?” - 一个是const限定的,另一个不是。 –
您没有向我们展示函数的定义,并且在任何情况下,函数的定义都不会影响重载解析。 –
当两个函数具有相同的确切定义时,它们如何超载? –