Я часто сталкиваюсь с большими, не шаблонными классами в C ++, где простые методы определяются непосредственно в теле класса в файле заголовка, а не отдельно в файле реализации. Например:
class Foo {
int getBar() const { return bar; }
...
};
Зачем это? Кажется, что есть недостатки. Реализация не так скрыта, как следовало бы, код менее читабелен, и компилятор также увеличил бы нагрузку, если заголовочный файл класса включен во многих разных местах.
Я предполагаю, что люди намерены встроить эти функции в другие модули, что может значительно повысить производительность. Однако я слышал, что новые компиляторы могут делать встраивание (и другие межпроцедурные оптимизации) во время соединения между модулями. Насколько широка поддержка такого рода оптимизации времени соединения, и действительно ли она делает такие определения ненужными? Есть ли другие веские причины для этих определений?