情况1:您可以重载两个功能,即:
void foo(int *);
void foo(const int *);
在情况2中,您不能重载两个函数:
void foo(int);
void foo(const int);
我已经编码并检查了此概念,但无法找出导致这种重载变化的原因。
根据标准§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] 删除。
我来说两句