可以通过const说明符重载函数吗?

时间:2013-10-19 08:35:13

标签: c++ function const overloading

是否可以通过const说明符重载函数。也就是说,我们有两个函数,一个是常量而另一个不是,我们可以说常量函数重载了非const函数吗?

2 个答案:

答案 0 :(得分:4)

是和否。

这取决于您放置const说明符的位置。

在定义成员函数时,这是可能的(是 - 部分):

int f() { /*code*/ }         //invoke this function on non-const object
int f() const { /*code*/ }   //ok : invoke this function on const object

请注意,在没有第一个函数的情况下,即使非const对象也将调用第二个函数(即const成员函数)并且在没有第二个函数的情况下函数,您将无法调用const对象上的第一个函数!

但这可能(非部分):

int g() { /*code*/ }
const int g() { /*code*/ } //error: redefinition 

无论他们是成员函数还是自由函数。

答案 1 :(得分:1)

Per§13.1/ 2:

无法将const置于return-type中以重载:

  

不能仅在返回类型上有所不同的函数声明   超载。

int func();
const int func(); // Error

无法将const置于参数列表中以进行重载:

  

参数声明仅在存在或不存在时有所不同   const和/或volatile是等价的。

void func(int x);
void func(const int x); // Error

但是,有可能:

  

const和volatile类型说明符隐藏在参数类型中   规范是重要的,可用于区分   重载函数声明。

void func(int &x);
void func(const int &x); // OK

并且,可以将const放在方法声明的末尾以区分重载:

int func();
int func() const; // OK