Форум программистов, компьютерный форум CyberForum.ru

реализация класса в .h файле хорошо или плохо? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Ошибка с полем в классе http://www.cyberforum.ru/cpp-beginners/thread939514.html
Пишу класс.Сюда его выкладывать не хочу,ибо он достаточно обширный.В классе доступе private задаю поле дескриптора файла.Тоесть что-то типо того: Class Myclass { private: HANDLE file; ... public: ... };
C++ Сообщения между win32 приложениями Как отправить сообщение (аналог системных типа WM_DESTROY только свои) и обработать приемником? приёмник это обычное консольное win32 приложение(когда в визуале пустой проект win32 создаешь) http://www.cyberforum.ru/cpp-beginners/thread939505.html
Как назвать классы? C++
Сразу замечу, что дело происходит в 2D без физики, как таковой. 1) У меня есть классы: Mixer - звуковой движок Graphics - графический движок У звукового движка есть базовый класс: MixerPrimitiveType (некоторая инфа для воспроизведения) от которого наследюутся:
C++ Не удается подключить к приложению gtest и свою статическую либу VS 2010
Здравствуйте, господа. Возникла проблема с линкером в VS 2010 после подключения к консольному приложению собственной же статической библиотеки. В солюшене 2 проекта: 1 - статическая библиотека, 2 - приложение для тестов её функций, к этому приложению подключен gtest через его статическую либу. В 1-м проекте статической библиотеки имеется h-ник с API этой либы. Так как API может оперировать...
C++ Консоль для ведения логов http://www.cyberforum.ru/cpp-beginners/thread939483.html
Не уверен, что пишу туда, куда нужно, но есть только один способ узнать. Интересуют существующие решения по сабжу. Требования простые: - Минимум зависимостей - Цветной текст и фон - Динамические фильтры записей - Много буков - Желательно, отдельный поток и кеширование на диск - Картинки и ссылки приветствуются
C++ Крутящееся колесо Может ли кто написать (срочно) программу крутящееся колесо, исходник чтобы был с комментариями. подробнее

Показать сообщение отдельно
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16824 / 5245 / 320
Регистрация: 30.03.2009
Сообщений: 14,125
Записей в блоге: 26
19.08.2013, 19:46     реализация класса в .h файле хорошо или плохо?
Цитата Сообщение от Убежденный Посмотреть сообщение
Во-первых, при чем здесь большие проекты ? Или Вы считаете, что только те фичи имеют
право на существование, которые сертифицированы для использования на космических станциях ?
На гипертрофированных примерах лучше видно. Возьмём проект из 1000 файлов *.cpp. Соберём их помодульно. Допустим, ушёл час времени. Поменяем один файл *.cpp (изменим реализацию интерфейса, что является наиболее частой операцией). Перекомпилируем. Пересборка займёт, условно говоря, несколько секунд, т.к. перекомпилироваться будет 1 файл, а не 1000. В случае режима с межмодульным инлайном при любом изменении в любом файле финальная межмодульная стадия компиляции будет работать по полной программе и займёт, условно говоря, столько же времени, сколько и полная сборка с нуля

Пока твой проект состоит из 10 файлов, разница между помодульным режимом в абсолютном времени будет небольшая. В проекте из 1000 файлов - разница будет огромная. Не говоря о том, что режим с межмодульным инлайном по времени работает далеко не линейно по отношению к количеству файлов. Увеличили количество файлов в 2 раза - время компиляции увеличится в 3, 5, 10 или хз сколько раз, но заведомо больше, чем в 2 раза. В противном случае межмодульная часть компилятора попросту работает некачественно

Цитата Сообщение от Убежденный Посмотреть сообщение
Так можно сказать, что и прекомпилированные заголовки не нужны, и разворачивание циклов, и
profile-guided optimization, и т.д.
Не надо путать оптимизации и режим работы. Раскрутка циклов - это оптимизация. Инлайн - это оптимизация. Режим IPO - это НЕ оптимизация, это режим, при котором у тебя попросту 100500 исходников склеиваются в один прозрачным для пользователя способом

Цитата Сообщение от Убежденный Посмотреть сообщение
Или поделитесь ссылкой на соответствующие исследования/статистику, или замечание ни о чем.
Конкретной ссылкой поделиться не могу. Но я с этим режимом работал задолго до того, как он появился у gcc и у интеловского компилятора. Могу даже объяснить причину, по которой этот режим вообще на свет появился:

1. (самая главная причина) Опубликовать цифры производительности. Все разработчики (будь то компиляторов, будь-то аппаратуры) публикуют цифры производительности по всяким бенчмаркам. Это стандартный узаконненный способ вешать лапшу на уши пользователям. Т.е. все замеры можно повторить и они покажут те же цифры. Но на реальных задачах (а не на бенчмарках) таких цифр с большой вероятностью не добиться. Режим межмодульного инлайна - ещё одна статья для увеличения цифр производительности, в котором компилятору можно получить бОльшее раздолье для всяких эвристических оптимизаций, которые хорошо ведут себя на бенчмарах, но плохо на реальных задачах
2. (полезная причина) Есть много старого софта, который был написан во времена, когда компиляторы были слабые, а потому никто не задумывался о том, чтобы написать софт правильно. Или программа на Си, в котором не было удобных и эффективных средств по части inline, которые есть на Си++. Может быть, что-то ещё.
3. (маркетинговая причина) Сделать режим для криворуких программистов, которые вообще не понимают (и не хотят понимать), как работает компилятор в первом приближении и как устроены машинные коды. На банере яркими буквами пишется, что, дескать, программируйте и не задумывайтесь ни о чём, наш супер-пупер межмодульный режим сделает вас абсолютно щастливыми

Цитата Сообщение от Убежденный Посмотреть сообщение
А аргументы ? Забыли ?
Про время компиляции и неудобство разработки уже говорил. Есть ещё такая вещь, как преносимость. Т.е. пока мы живём на компиляторе, в котором этот режим есть, у нас программа более-меднее производительно работает. Как только перешли на другую платформу, где этого режима нет, получили дерьмовый код.

Цитата Сообщение от Убежденный Посмотреть сообщение
А размазывая определения по хидерам и cpp-файлам, можно наступить на мину под названием
"нарушение ODR". Особенно в тех самых "больших" проектах. Компилятор прожует и не поморщится
Пример можно? Имеется в виду пример того, как наступишь, а потом долго ищешь причину

Цитата Сообщение от Убежденный Посмотреть сообщение
Наоборот. Используйте их. И вам не придется думать о том, что компилятор не сможет
где-то что-то заинлайнить только потому, что у него нет доступа к определению.
А вообще, и то и другое попахивает преждевременной оптимизацией.
"И то, и другое" - это что?
 
Текущее время: 14:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru