Если я сделаю функцию встроенной, изменится ли она на внутреннюю?
Нет, если он встроен, это не изменит его связь.
Почему мне нужно определить встроенную функцию в каждом файле, чтобы иметь возможность вызывать ее?
Потому что этого требует язык. C ++ 11 7.1.2 / 4 говорит: «Встроенная функция должна быть определена в каждой единице перевода, в которой она используется odr, и должна иметь точно
одно и то же определение в каждом случае. "
У меня внутренняя связь?
Нет, он все еще имеет внешнюю связь: указатель на функцию будет иметь одинаковое значение в любой единице перевода, а любые статические объекты, объявленные внутри функции, будут тем же объектом в любой единице перевода.
Что если я использую static inline
?
Это даст внутреннюю связь из-за static
. Это означает, что определения в отдельных единицах перевода будут создавать отдельные функции с разными адресами и разными копиями любых статических объектов.