2015-11-04 71 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或不。返回類型是不是部分簽名來區分重載函數。

如果兩個具有相同名稱的函數具有唯一的簽名,則它們是不同的。