C ++。我们可以有相同的命名功能,但在不同的文件中?

时间:2013-06-01 18:09:14

标签: c++ function compiler-construction

假设我有三个.cpp文件和两个头文件。

第一档:

  

它是main.cpp,它调用所有函数和东西。包括2个头文件。


第二档:

  

包含两个功能:

int print(int num2, int num1)

int update(int num1)

第3档:

  

包含三个功能:

int calculate(int num2, int num3, int num4)

int update(int num2, char random)

int divied(int all)

+++++++++++++++++++++++++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++

正如你所知,第二和第三个文件有一个相同的命名函数“int update” 但在一个中它有1个参数而在另一个中它有两个。

我能打电话给我想要的人吗?我会收到编译错误吗? 我现在无法测试它,因为我正在使用库计算机。

4 个答案:

答案 0 :(得分:5)

从技术上讲,是的,你会的。具有不同签名的函数形成过载集,并且在调用时将通过匹配传递的实际参数的数量和类型来选择正确的函数。

OTOH在全局命名空间中使用这样的名称是一种可怕的做法。这只是偶然发生的事故 - 有人会通过拼写错误称之为非预期的功能。

真正的重载集不是随机形成的,而是由设计形成的:这是一个具有相同语义的函数,只是使用不同类型的弹药。他们意味着在联盟中工作,并且当回答“哪一个被称为”是“我不关心”时最有效。无论编译器选择什么,都可以做正确的工作。

答案 1 :(得分:0)

该名称将在C ++中被破坏,因此您可以使用不同参数的那些函数。 TGhe编译器为它们创建一个名称,该名称基于参数。

这就是为什么你可以在同一个类中拥有类似的东西:

foo(int a);
foo(int a, int b);
foo(std:string s),
etc. ...

这也适用于正常功能。

答案 2 :(得分:0)

是的,这在C ++中是允许的,称为函数重载。来自C ++语言标准的C13 p1

<强>重载

  

如果为相同范围中的单个名称指定了两个或更多不同的声明,则该名称被称为重载。通过扩展,在同一范围内声明相同名称但具有不同类型的两个声明称为重载声明。只有功能功能模板声明可以重载;变量和类型声明不能重载。

只要使用正确的参数调用函数,编译器就会使用正确的函数。

答案 3 :(得分:0)

是的,这称为函数重载。事实上,它可以在同一个文件中工作。只需确保函数不采用相同的参数,否则编译器将无法区分它们。