2015-11-04 3 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, их типы параметров и «атрибуты» (например, const, volatile или noexcept после списка аргументов), должны быть разными. Две функции с одним и тем же набором типов параметров и «атрибутами», но с другим обратным типом, нарушают ODR.

Просто не беспокойтесь об этом и позвольте компоновщику быть рабом компилятора, в котором он родился.

2

Да, это две разные функции.

Функциональная подпись в основном основана на аргументах: количество аргументов, их типы и порядок. Функции членов класса также имеют модификаторы, например const или нет. Тип возврата - не часть подписи, чтобы различать перегруженные функции.

Если две функции с тем же именем имеют уникальные подписи, то они разные.

Смежные вопросы