Почему методы C ++ иногда определяются внутри классов? - PullRequest
10 голосов
/ 06 ноября 2008

Я часто сталкиваюсь с большими, не шаблонными классами в C ++, где простые методы определяются непосредственно в теле класса в файле заголовка, а не отдельно в файле реализации. Например:

class Foo {
  int getBar() const { return bar; }
  ...
};

Зачем это? Кажется, что есть недостатки. Реализация не так скрыта, как следовало бы, код менее читабелен, и компилятор также увеличил бы нагрузку, если заголовочный файл класса включен во многих разных местах.

Я предполагаю, что люди намерены встроить эти функции в другие модули, что может значительно повысить производительность. Однако я слышал, что новые компиляторы могут делать встраивание (и другие межпроцедурные оптимизации) во время соединения между модулями. Насколько широка поддержка такого рода оптимизации времени соединения, и действительно ли она делает такие определения ненужными? Есть ли другие веские причины для этих определений?

Ответы [ 3 ]

14 голосов
/ 06 ноября 2008

Стандарт C ++ говорит, что методы, определенные внутри определения класса, по умолчанию inline. Это приводит к очевидному увеличению производительности для упрощенных функций, таких как геттеры и сеттеры. Кросс-модульная оптимизация во время соединения сложнее, хотя некоторые компиляторы могут это сделать.

7 голосов
/ 06 ноября 2008

Часто нет другой причины, кроме того, что это проще и экономит время. Это также сохраняет небольшой беспорядок в файле реализации, занимая то же количество строк в заголовочном файле. И быть менее читабельным довольно сложно, если оно ограничено такими вещами, как геттеры и сеттеры.

2 голосов
/ 06 ноября 2008

Вы ответили на свой вопрос, это действительно встроенные методы.

Причины их использования - производительность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...