2015-11-04 90 views
0

如果具有相同名称的函数在具有不同签名的多个文件中定义,那么这些函数是否被重载,例如:重载函数

File1.cpp

int foo(){//do something} 

File2.cpp

int foo(int a){//do something} 

如果我编译在同一个项目中这两个文件,将这些功能被视为重载函数。

回答

0

是的,他们将appropiately name-mangled成两个单独的功能,其scope是全球性的,在全局命名空间(a.k.a:在::命名空间)。

对于两个函数被重载,并且不违反ODR,它们的参数类型和“属性”(参数列表之后,如constvolatile,或noexcept)应是不同的。两个函数具有相同的一组参数类型和“属性”,但具有不同的返回类型,这违反了ODR。

只是不用担心这一点,并让链接器成为它诞生的编译器的奴隶。

2

是的,它们是两种不同的功能。

函数签名主要基于参数:参数个数,类型和顺序。类成员函数也有修饰符,如const或不。返回类型是不是部分签名来区分重载函数。

如果两个具有相同名称的函数具有唯一的签名,则它们是不同的。