是否可以通过 const 说明符重载函数。也就是说,我们有两个函数,一个是常量,另一个不是,我们可以说常量函数重载了非常量函数吗?
user1886376
问问题
135 次
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 回答