Visual Studio позволяет Вам создавать "встроенные" классы (если я не ошибаюсь с именем). Так заголовок класса и реализация все в одном файле.
H. файл содержит определения и объявления класса и функций, нет никакого .cpp файла вообще.
Таким образом, я задавался вопросом, существует ли какой-либо штраф за то, что сделали его тот путь? какие-либо недостатки?
Большое спасибо
Есть еще одно потенциальное наказание: производительность. Если вы сделаете слишком много встроенных функций, это приведет к раздутию кода, что приведет к тому, что исполняемые файлы будут работать и циклы могут не помещаться в кэш инструкций целевого ЦП.
Без штрафа.
Но это также не означает, что код на самом деле встроен.
Ключевое слово They inline - это всего лишь подсказка компилятора, которая обычно игнорируется, поскольку компилятор обычно намного умнее разработчика с точки зрения знания, когда вставлять код.
Вы можете поместить полную реализацию класса в заголовок с помощью любого компилятора. Обычно существует штраф с точки зрения времени компиляции - заголовок будет компилироваться отдельно для каждого исходного файла, который его включает.
Также может быть наказание с точки зрения раздувания кода - размещение определений функций внутри определения класса неявно объявляет их встроенными, поэтому может быть повышенная вероятность того, что компилятор сгенерирует код для каждого из них по отдельности вместо генерации код в одном месте и вызовы к нему в другом месте.
Ключевое слово inline - это только подсказка компилятору для встроенного кода. В Visual Studio есть спецификатор __forceinline для функций, который заставит компилятор принудительно встроить функцию без анализа затрат и выгод.
О __forceinline: http://msdn.microsoft.com/en-us/library/z8y1yy88.aspx
Файл * .h, содержащий все определения и объявления, не должен иметь никакого значения, за исключением время компиляции для больших файлов.
Очень плохая идея, если вы спросите меня, особенно для больших проектов. Взгляните на Lakos "Large-Scale C ++ Software Design", чтобы узнать больше о недостатках такого подхода.
Есть два «штрафа»
есть ли какие-нибудь штрафы за то, что вы делаете это таким образом? Какие-нибудь недостатки?
Да. Если вам нужно изменить реализацию класса, поскольку она находится в заголовочном файле, все пользователи класса должны перекомпилировать его, хотя их должен волновать только интерфейс. Для некоторых проектов это может быть довольно дорого.