重载函数
Overloading Function
如果在具有不同签名的多个文件中定义了同名函数,这些函数是否重载,例如
File1.cpp
int foo(){//do something}
File2.cpp
int foo(int a){//do something}
如果我在同一个项目中编译这两个文件,这些函数是否会被视为重载函数。
是的,它们是两个不同的函数。
函数签名主要基于参数:参数的数量、类型和顺序。 Class 成员函数也有修饰符,比如 const
或者没有。 Return 类型 不是 签名的一部分以区分重载函数。
如果同名的两个函数具有唯一的签名,则它们是不同的。
是的,它们将是适当的 name-mangled into two separate functions whose scope is global, at the global namespace (a.k.a: the ::
命名空间)。
对于要重载的两个函数,且不违反ODR,它们的参数类型和"attributes"(如const
、volatile
或noexcept
在参数列表之后)应该不同。具有相同参数类型和 "attributes" 但具有不同 return 类型的两个函数违反了 ODR。
这个不用担心,让链接器成为它天生的编译器的奴隶。
如果在具有不同签名的多个文件中定义了同名函数,这些函数是否重载,例如
File1.cpp
int foo(){//do something}
File2.cpp
int foo(int a){//do something}
如果我在同一个项目中编译这两个文件,这些函数是否会被视为重载函数。
是的,它们是两个不同的函数。
函数签名主要基于参数:参数的数量、类型和顺序。 Class 成员函数也有修饰符,比如 const
或者没有。 Return 类型 不是 签名的一部分以区分重载函数。
如果同名的两个函数具有唯一的签名,则它们是不同的。
是的,它们将是适当的 name-mangled into two separate functions whose scope is global, at the global namespace (a.k.a: the ::
命名空间)。
对于要重载的两个函数,且不违反ODR,它们的参数类型和"attributes"(如const
、volatile
或noexcept
在参数列表之后)应该不同。具有相同参数类型和 "attributes" 但具有不同 return 类型的两个函数违反了 ODR。
这个不用担心,让链接器成为它天生的编译器的奴隶。