2015-07-11 182 views
-2

我有两个函数。返回值之间的区别int&和const int&

int& abc() 
const int& abc() const 

这两个函数有什么区别?我有一个里面定义了这两个函数的类的源代码。这两个功能不是模棱两可的,因为它们有确切的定义?这两者之间的区别究竟是什么?

+3

_“这两者之间究竟有什么区别?” - 一个是const限定的,另一个不是。 –

+0

您没有向我们展示函数的定义,并且在任何情况下,函数的定义都不会影响重载解析。 –

+0

当两个函数具有相同的确切定义时,它们如何超载? –

回答

2

下面是一个简单的程序展示在两者之间的区别是:第一功能被允许修改成员变量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

相关问题