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