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