Форум программистов, компьютерный форум 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
Эксперт CАвтор FAQ
17391 / 5629 / 352
Регистрация: 30.03.2009
Сообщений: 15,415
Записей в блоге: 26
20.08.2013, 10:14     реализация класса в .h файле хорошо или плохо?
Цитата Сообщение от Убежденный Посмотреть сообщение
Ну так может пора ему уже на свалку, этому инлайнингу, раз он не играет существенной роли в оптимизации?
За тестам далеко ходить не стал, взял примитивный тест на std::vector

C++
#include <vector>
 
/* Навесим сюда атрибут noinline, чтобы в обоих последующих
 * запусках внутренности функции были одними и теми же,
 * и не зависели от того, как у нас компилятор накрутит цикл
 * в точке вызова данной функции */
template <typename T>
void __attribute__((noinline))
test_copy (const T &lhs, T &rhs)
{
  rhs.clear();
  std::insert_iterator<T> ins_it(rhs, rhs.begin());
  std::copy(lhs.begin(), lhs.end(), ins_it);
}
 
int
main (void)
{
  std::vector<int> lhs, rhs;
  lhs.resize (100000);
  for (int i = 0; i < 10000; i++)
    test_copy (lhs, rhs);
}
Код
$ g++ t.cc -O3
$ time ./a.out
real    0m2.617s
user    0m2.549s
sys     0m0.002s

$ g++ t.cc -O3 -fno-inline
$ time ./a.out
real    1m21.080s
user    1m19.243s
sys     0m0.009s
Первый запуск соответствует "правильной" реализации классов, о которой я писал в посте #31. То есть в заголовочных файлах stl помещается именно реализация методов класса. И сделано оно так для того, чтобы эффективно отработать в совокупности всех используемых в программе контейнеров, шаблонов, пользовательских классов.

Второй запуск с опцией -fno-inlline (который запрещает компилятору делать инлайн) соответствует "академической" реализации классов, в которых интерфейс строго отделён от реализации (т.е. в хидер выносятся только описания, а все реализации остаются в файле *.cpp).

Грамотная реализация (в которой учтено, что компилятор работает с инлайном), как мы видим, отработала быстрее более, чем на порядок. Понятно, что пример искусственный, но он демонстрирует ту концепцию, в рамках которой разрабатывался язык Си++ со своим библиотечным окружением
 
Текущее время: 14:19. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru