在C ++中定义具有相同签名的两个函数

时间:2013-05-24 13:25:04

标签: c++ function

为什么我们可以用以下方式定义具有相同签名的两个函数?

extern void print(int *ia, int sz);
void print(int *array, int size);

2 个答案:

答案 0 :(得分:7)

这些不是定义,它们是(冗余的)声明。如果你通过提供一个函数体将它们变成定义,你肯定会从编译器中得到错误。

答案 1 :(得分:2)

C和C ++中的“声明”只是告诉名称和该名称的类型。

C和C ++中的“定义”实际上使事物成为现实。变量的空间被分配,初始值设置,函数代码生成等等(好的,这是一个简化的版本)。

这两个是声明,因为它们缺少函数体。由于它们是函数,extern是不必要的,因此它们是相同的。只要不存在冲突,您可以根据需要多次声明相同的内容。并且由于函数允许基于C ++中的参数进行重载,因此如果您创建具有相同参数但返回类型不同的函数,则只能发生冲突。使用变量或C函数,您不能发生名称冲突。