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





Вы ответили на свой вопрос, это действительно встроенные методы.
Причины их использования - производительность.
Стандарт C++ говорит, что методы, определенные внутри определения класса, по умолчанию являются inline. Это приводит к очевидному увеличению производительности для упрощенных функций, таких как геттеры и сеттеры. Межмодульная оптимизация во время компоновки сложнее, хотя некоторые компиляторы могут это сделать.
Да, но «встроенные по умолчанию» не означает, что компилятор встроит их, только то, что вам не нужно вручную добавлять намекать, которым на самом деле является ключевое слово «inline».
Часто нет никакой другой причины, кроме того, что это проще и экономит время. Это также позволяет избежать беспорядка в файле реализации, занимая при этом такое же количество строк в файле заголовка. И быть менее читаемым - это довольно сложно, если оно ограничивается такими вещами, как геттеры и сеттеры.
Тем не менее, это не означает, что компилятор встроит их, только то, что вам не нужно вручную добавлять намекать, которым на самом деле является ключевое слово inline.