C ++中的重载概念

苏米·库玛·辛格(SUMIT KUMAR SINGH)

情况1:您可以重载两个功能,即:

void foo(int *);
void foo(const int *);

在情况2中,您不能重载两个函数:

void foo(int);
void foo(const int);

我已经编码并检查了此概念,但无法找出导致这种重载变化的原因。

P0W

根据标准§13.1

仅在存在和不存在const和/或volatile时不同的参数声明是等效的也就是说,在确定要声明,定义或调用哪个函数时,将忽略每种参数类型的const和volatile类型说明符。[ 例子:

typedef const int cInt;
int f (int);
int f (const int); // redeclaration of f(int)
int f (int) { /* ... */ } // definition of f(int)
int f (cInt) { /* ... */ } // error: redefinition of f(int)

—结束示例]

以这种方式,仅忽略参数类型说明中最外层的const和volatile类型说明符。包含在参数类型规范中的const和volatile类型说明符很重要,可用于区分重载的函数声明。特别是,对于任何类型T,“ T的指针”,“ const T的指针”和“ volatile T的指针”被视为不同的参数类型, “ T的引用”,“ const T的引用”和“ “对易失性T的引用。”

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章