1

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

4

2 回答 2

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对象上调用第一个函数!

但这是不可能的(无部分):

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

不管它们是成员函数还是自由函数。

于 2013-10-19T08:39:45.540 回答
1

根据 § 13.1 / 2:

不可能将const返回类型放入重载:

仅返回类型不同的函数声明不能​​被重载。

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
于 2013-10-19T09:09:09.113 回答