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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
#1

При вынесении определения всегда ли нужно указывать функцию как inline явно? - C++

22.07.2014, 11:21. Просмотров 1331. Ответов 46
Метки нет (Все метки)

Бьярни пишет
Если в описании класса функция-член определена, а не только описана, то она считается подстановкой. Это значит, например, что при
трансляции функций, использующихchar_stack из предыдущего примера, не будет использоваться
никаких операций вызова функций, кроме реализации операций вывода!
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
class char_stack { 
int size; 
char* top; 
char* s; 
public: 
  char_stack(int sz) { top=s=new char[size=sz]; } 
  ~char_stack() { delete[] s; } // деструктор
  void push(char c) { *top++ = c; } 
  void pop() { return *--top; } 
};

Далее
Функцию-член можно описать со спецификацией inline и вне описания класса:
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
11
12
class char_stack { 
int size; 
char* top; 
char* s; 
public: 
char pop(); 
// ... 
}; 
inline char char_stack::pop() 
{ 
return *--top; 
}

Собсно при вынесении определения нужно всегда указывать функцию как inline явно? Или она всеже будет ею изначально как описано в начале. Слово можно както неоднозначно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.07.2014, 11:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос При вынесении определения всегда ли нужно указывать функцию как inline явно? (C++):

Зачем нужно явно указывать тип переменной? - C++
Всем привет! Объясните зачем нужно явно указывать тип переменной? Например в С++ это обязательно, а php нет. Просто говорят что не...

При вынесении кода в отдельную функцию выдает ошибки - C++
Здравствуйте, подскажите пожалуйсто где я тут что неправильно написал. Код работает если поставить его в маин, но вот как только я его...

Inline функции: как обеспечить уверенность в том, что заданный код, абсолютно всегда будет инлайниться? - C++
Вопрос заключается в следующем: как обеспечить уверенность в том, что приведенный ниже код, абсолютно всегда будет инлайниться? Это...

Как адаптировать функцию под inline - C++
Дана функция: bool Str(ifstream &f, const char *s) { char buff; return !(f.get(buff,...

Как избавиться от необходимости явно указывать тип в enum? - C#
Как сделать, чтобы для перечислений не нужно было явно указывать тип int? switch (direction) { case...

что нужно указывать в образце поиска при создании макроса - MS Access
Подскажите, пожалуйста, что нужно указывать в образце поиска при создании макроса, если я хочу с помощью кнопки отыскать нужную фамилию?

46
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
22.07.2014, 13:02 #16
TierX, Следует. В нормальных программах следует. А для тестов как-то пофиг, я предпочитаю просто писать в .cpp, не разбивая на .h/.cpp, ибо так проще, быстрее и для тестов сойдет.
1
Tulosba
22.07.2014, 13:16
  #17

Не по теме:

Цитата Сообщение от ForEveR Посмотреть сообщение
А для тестов как-то пофиг, я предпочитаю просто писать в .cpp, не разбивая на .h/.cpp, ибо так проще, быстрее и для тестов сойдет.
А ещё не нужно искать (и использовать) всякие многофайловые онлайн компиляторы

0
TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
22.07.2014, 13:29  [ТС] #18
Вот и я о томже только наоборт я люблю в .h все пихать. Ибо 10 файлоов куда лучше 20. И хотелось бы чтобы так можно было делать постоянно. НО без какихто последствий увелечения времени компиляции сборки итд. Вот именно эти последствия я и пытаюсь найти .И понять есть ли они по настоящему или просто как и везеде "так принято"

Но вы говорите следует. А почему не ясно) Толи потому ,что такой подход снижает реальные показатели такие как время компляции сборки и запуска. Толи потому что "так принято".

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

Я не горю желанием мучатьсяв процесе разработки с Х 2 кол.файлов программы просто потомучто "так принято". Гораздро проще просто писать так чтобы потом можно было за 2 минуты раскидать реализацию по срр от хедеров(если уж "так принято").
Но опять же если по этой причине я буду в 4 раза дольше ждать пока моя программа перекомпилируеться и запуститься то тогда это аргумент в "следует"

Добавлено через 8 минут
Вон Бьярни тоже говорит что если у вас больше 10 хедеров то вы маньяк мазохист
0
ForEveR
В астрале
Эксперт С++
7978 / 4737 / 321
Регистрация: 24.06.2010
Сообщений: 10,543
Завершенные тесты: 3
22.07.2014, 13:38 #19
TierX, It depends. Хедер-онли библиотеки тоже существуют, почему нет. Однако естественно скорость компиляции изменяется и быстрее компилируются не хедер-онли. Все просто - вы вносите изменение в хедер, который включен еще в 10-к хедеров, которые включены еще в 10-к хедеров и т.д. - все куда включено перекомпилируется. Вы изменяете .cpp файл - перекомпилируются только те файлы/либы, которые зависят от этой либы.
1
TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
22.07.2014, 13:49  [ТС] #20
ForEveR, Короче отличным выходом послужило бы средство которое бы показывало время за котрое проект был перекомпелирован и пересобран и еще что там (вобщем все все процедуры). Полюому есть каке-то функции или настройка которая гдето в IDE выводила это время. Это былобы очень ок.
Вот моя VS 12 в выводе показует все кроме времени)
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.07.2014, 14:02 #21
Цитата Сообщение от TierX Посмотреть сообщение
которое бы показывало время за котрое проект был перекомпелирован и пересобран
Ну вот QtCreator например показывает.
0
TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
22.07.2014, 15:03  [ТС] #22
так нада в другую тему с этим вопросом наверно подацо. Говорят что VS показует все но почемуто не у меня.

Добавлено через 40 минут
Поцоны незнают а гугл говорит мерять секундомером. Да wtf...
0
Psilon
Master of Orion
Эксперт .NET
5896 / 4793 / 634
Регистрация: 10.07.2011
Сообщений: 14,407
Записей в блоге: 5
Завершенные тесты: 4
22.07.2014, 15:12 #23
TierX, Tools -> Options -> Projects and Solutions -> VC++ Project Settings -> Build Timing
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
22.07.2014, 15:13 #24
Цитата Сообщение от TierX Посмотреть сообщение
Поцоны незнают а гугл говорит мерять секундомером. Да wtf...
а это ?
Tools -> Options -> Projects and Solutions -> VC++ Project Settings -> Build Timing
эх ... опередели отсюда
1
Psilon
22.07.2014, 15:28
  #25

Не по теме:

Tulosba, оттуда, оттуда...

0
TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
22.07.2014, 15:28  [ТС] #26
Psilon, Tulosba, Пасиб выручили.
Правда я офигел от кол.всего чо там вывелось.
0
Psilon
Master of Orion
Эксперт .NET
5896 / 4793 / 634
Регистрация: 10.07.2011
Сообщений: 14,407
Записей в блоге: 5
Завершенные тесты: 4
22.07.2014, 15:30 #27
TierX, ну, для этого и используют предкомпилированный stdafx.h, на который все новички жалуются
0
TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
22.07.2014, 15:38  [ТС] #28
Psilon, Для чего для этого?
Я както читал об этом stdafx.h. Там говорили что это средство масштабных проектов толку от него мало в мелких или даже средних...
0
Psilon
Master of Orion
Эксперт .NET
5896 / 4793 / 634
Регистрация: 10.07.2011
Сообщений: 14,407
Записей в блоге: 5
Завершенные тесты: 4
22.07.2014, 15:49 #29
TierX, ну он ускоряет раз в 10 обычно*, вопрос в том, что длится 100 мс сборка или 10, как-то пофиг. А на масштабных проектах час или 6 минут - роляет

Не по теме:

*за данные цифры компания ООО Psilon не несет никакой ответственности и не гарантирует ускорения в 10 раз. Данная информация предоставлена as is, никакие претензии по ущербу, нанесенным учетом этой информации компания не несет.

0
TierX
20 / 20 / 0
Регистрация: 28.02.2014
Сообщений: 138
22.07.2014, 15:56  [ТС] #30
я понял вобщем для чего. Думаю пока обойдусь )

Добавлено через 7 минут
Вобщем всем спасибо вроде коечто прояснилось.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.07.2014, 15:56
Привет! Вот еще темы с ответами:

Нужно ли всегда использовать using при работе с файлами - C#
using (FileStream fs = new FileStream(path,FileMode.Open,FileAccess.ReadWrite)) { using (StreamReader fr = new StreamReader(fs)) ...

При составлении программ нужно всегда сначала математическую модель составлять? - Pascal
Если сразу пытаться писать и исправлять ошибки по ходу дела, то это плохо?

Как указывать аргументы при вызове одного метода из другого? - C#
Добрый день! Прошу прощения за совсем примитивизм: public void panel1_paint(Object sender, PaintEventArgs e) { ...

Server 2012 Как сделать так, чтобы при подключении по RDP не указывать порт? - Windows Server
Добрый день поменял порт через регистр с 3389 на 3811 , теперь надо при подключении порт указывать а можно что то сделать на сервере...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
22.07.2014, 15:56
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru