C++ C+中的重载概念+;
案例1: 您可以重载两个函数,即:C++ C+中的重载概念+;,c++,function,oop,overloading,C++,Function,Oop,Overloading,案例1: 您可以重载两个函数,即: void foo(int *); void foo(const int *); 在,, 案例2: 不能重载两个功能: void foo(int); void foo(const int); 我已经对这个概念进行了编码和检查,但无法找到重载变化的原因。正式参数的顶级简历资格被忽略。确定函数的类型 (CV:const或volatile) 理解它的一种方法是,形式参数的顶级CV限定不能影响函数的调用方,也不能影响机器代码。这只是对实施的限制。因此,给定一个声明v
void foo(int *);
void foo(const int *);
在,,
案例2:
不能重载两个功能:
void foo(int);
void foo(const int);
我已经对这个概念进行了编码和检查,但无法找到重载变化的原因。正式参数的顶级简历资格被忽略。确定函数的类型 (CV:
const
或volatile
)
理解它的一种方法是,形式参数的顶级CV限定不能影响函数的调用方,也不能影响机器代码。这只是对实施的限制。因此,给定一个声明
void foo(int)
您可以使用void foo(const int)
来实现,如果您愿意,也可以使用void foo(const int)
来实现。在第二种情况下,由于整数是基元类型,int
或const int
通过值传递,函数生成变量的副本。因此,函数定义是相同的
在第一种情况下,第一个函数接受整数指针作为参数,而第二个函数接受指向常量整数的指针。这些是不同的数据类型,因为整数的值不会被指针的值复制,因此数据是通过引用传递的 来自标准§13.1
参数声明仅在存在或不存在
常量和/或volatile是等效的。也就是说,常量和volatile
确定时忽略每个参数类型的类型说明符
正在声明、定义或调用的函数。[示例:
-[结束示例]
仅位于最外层的const和volatile类型说明符
以这种方式忽略参数类型规范;常数
和隐藏在参数类型中的易失性类型说明符
规范是重要的,可用于区分
重载函数声明。特别是对于任何类型的T,
“指向T的指针”、“指向常量T的指针”、“指向易失性T的指针”是
考虑到不同的参数类型,与“引用T”一样
引用常量T和引用易失性T
const int
作为参数本质上是冗余的,因为参数是按值传递的。与int*
不同,您对被调用函数中的int
所做的任何操作都不会影响其在调用者中的值。@Carey:const
始终是冗余的,因为如果删除了const
的所有实例,程序的工作方式将完全相同。const
的目的是作为已知的约束条件,约束哪些值可以更改。这对程序员的帮助和对纯局部变量的帮助一样多,所以你的参数没有意义。@CareyGregory;好的,除了命名的原始const
值外,如果删除const
,这些名称将不会用作数组大小。但你明白了。当时和现在的区别:我喝了一杯咖啡六羟甲基三聚氰胺六甲醚。。。他举了一个例子,在这个例子中,const
确实起到了作用。@vanza:是的。该示例不是顶级的常量。“因为整数是基本类型”并不重要。
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)