штраф за “встроенные” классы

Visual Studio позволяет Вам создавать "встроенные" классы (если я не ошибаюсь с именем). Так заголовок класса и реализация все в одном файле.

H. файл содержит определения и объявления класса и функций, нет никакого .cpp файла вообще.

Таким образом, я задавался вопросом, существует ли какой-либо штраф за то, что сделали его тот путь? какие-либо недостатки?

Большое спасибо

8
задан Billy ONeal 7 April 2010 в 19:50
поделиться

7 ответов

Есть еще одно потенциальное наказание: производительность. Если вы сделаете слишком много встроенных функций, это приведет к раздутию кода, что приведет к тому, что исполняемые файлы будут работать и циклы могут не помещаться в кэш инструкций целевого ЦП.

1
ответ дан 5 December 2019 в 14:02
поделиться

Без штрафа.
Но это также не означает, что код на самом деле встроен.

Ключевое слово They inline - это всего лишь подсказка компилятора, которая обычно игнорируется, поскольку компилятор обычно намного умнее разработчика с точки зрения знания, когда вставлять код.

0
ответ дан 5 December 2019 в 14:02
поделиться

Вы можете поместить полную реализацию класса в заголовок с помощью любого компилятора. Обычно существует штраф с точки зрения времени компиляции - заголовок будет компилироваться отдельно для каждого исходного файла, который его включает.

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

2
ответ дан 5 December 2019 в 14:02
поделиться

Ключевое слово inline - это только подсказка компилятору для встроенного кода. В Visual Studio есть спецификатор __forceinline для функций, который заставит компилятор принудительно встроить функцию без анализа затрат и выгод.

О __forceinline: http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx

Файл * .h, содержащий все определения и объявления, не должен иметь никакого значения, за исключением время компиляции для больших файлов.

0
ответ дан 5 December 2019 в 14:02
поделиться

Очень плохая идея, если вы спросите меня, особенно для больших проектов. Взгляните на Lakos "Large-Scale C ++ Software Design", чтобы узнать больше о недостатках такого подхода.

1
ответ дан 5 December 2019 в 14:02
поделиться

Есть два «штрафа»

  • Один будет наложен во время компиляции. Если у вас необычно большой проект, у вас будет много файлов заголовков, которые препроцессор будет расширять один в другой с гораздо большим количеством кода. Изменение одного файла .h вызовет перекомпиляцию всех файлов, которые его включают.
  • Во-вторых, это (возможно) приведет к созданию бинарных файлов большего размера, потому что этот код реплицируется в других объектных файлах.
0
ответ дан 5 December 2019 в 14:02
поделиться

есть ли какие-нибудь штрафы за то, что вы делаете это таким образом? Какие-нибудь недостатки?

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

8
ответ дан 5 December 2019 в 14:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: