重载函数

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"(如constvolatilenoexcept 在参数列表之后)应该不同。具有相同参数类型和 "attributes" 但具有不同 return 类型的两个函数违反了 ODR。

这个不用担心,让链接器成为它天生的编译器的奴隶。