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

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

Войти
Регистрация
Восстановить пароль
 
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 145
#1

Есть ли смысл помечать функции как inline, если их прототип уже есть в .h файле? - C++

29.07.2014, 12:11. Просмотров 596. Ответов 12
Метки нет (Все метки)

Есть ли смысл помечать функции как inline, если их прототип уже есть в .h файле? Функции в одну строчку, сразу в ретарне вычисляет возвращаемое значение.
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.07.2014, 12:11
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Есть ли смысл помечать функции как inline, если их прототип уже есть в .h файле? (C++):

Одномерные Массивы. Решение уже есть. Переделать через функции. - C++
Помогите решить задачу по одномерному массиву ПО ФУНКЦИЯМ. Задачи уже решены, надо их переделать по функциям. 1. Найти номер...

Определить, есть ли в заданном предложении цифры. И если есть, найти их сумму - C++
Определить, есть ли в заданном предложении цифры. И если есть, найти их сумму.

Есть ли в данном массиве элемент, равный заданному числу? Если есть, то вывести номер одного из них. - C++
Есть ли в данном массиве элемент, равный заданному числу? Если есть, то вывести номер одного из них. Напишите программу пожалуйста,очень...

Узнать, есть ли среди элементов массива элементы с нечетными номерами, которые кратны 17, и если есть, посчитать их сумму - C++
Проблема с заданием. Дан одномерный массив. Узнать, есть ли среди них элементы с нечетными номерами, которые кратны 17, и если есть,...

Определить, есть ли такая фирма, у которой все 5 лет наблюдался рост производства и, если есть, то каков её номер - C++
Имеется таблица с данными об объёме производства 10 фирм за 5 лет. Определить, есть ли такая фирма, у которой все 5 лет наблюдался рост...

Как узнать, есть ли уже С++ в этом ноутбуке? - C++
Как узнать, есть ли уже С++ в этом ноутбуке? И где?

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
29.07.2014, 12:17 #2
"Помечайте все, компилятор отсортирует."
0
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 145
29.07.2014, 12:18  [ТС] #3
Как-то расплывчато.
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,384
Завершенные тесты: 1
29.07.2014, 12:22 #4
Как inline она должна быть определенна в той же единице трансляции, в которой эта функция используется. Поэтому их обычно определяют сразу в заголовках ( в .h файлах ).
0
Jupiter
Каратель
Эксперт С++
6554 / 3975 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
29.07.2014, 12:23 #5
Цитата Сообщение от m0 Посмотреть сообщение
Есть ли смысл помечать функции как inline, если их прототип уже есть в .h файле?
нет. для того чтобы функция стала кандидатом на подстановку она должны быть помечена как inline, а inline функции должны быть включены в каждую единицу трансляции в которой используются т.е. и тело функции должно быть в хедере
1
CheshireCat
Эксперт С++
2892 / 1241 / 78
Регистрация: 27.05.2008
Сообщений: 3,370
29.07.2014, 12:24 #6
inline - это всего лишь нижайшая просьба к компилятору: "Будьте добры, если это не затруднит, заинлайньте эту функцию." Компилятор может эту просьбу выполнить, а может - нет. Как карта ляжет.
0
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 145
29.07.2014, 12:44  [ТС] #7
Т.е. все которые я хочу пометить как инлайн, нужно описывать реализацию в там где и прототип?
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
29.07.2014, 12:46 #8
Цитата Сообщение от m0 Посмотреть сообщение
Т.е. все которые я хочу пометить как инлайн, нужно описывать реализацию в там где и прототип?
Да. А именно в хедер. Но и это не даст вам сто процентной гарантии.
1
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 145
29.07.2014, 13:08  [ТС] #9
А уже непосредственно в реализации помечать как инлайн?
0
SatanaXIII
Супер-модератор
Эксперт С++
5616 / 2651 / 246
Регистрация: 01.11.2011
Сообщений: 6,529
Завершенные тесты: 1
29.07.2014, 13:12 #10
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от m0 Посмотреть сообщение
А уже непосредственно в реализации помечать как инлайн?
Конечно. Реализация-то уже будет в хедере.
У вас только в .h будет функция, вся абсолютна, вместе с реализацией. А в .cpp не будет вообще ничего к ней относящегося.
0
m0
2 / 2 / 1
Регистрация: 03.12.2013
Сообщений: 145
29.07.2014, 13:13  [ТС] #11
SatanaXIII, Окей, я так и делаю.
0
CyberSolver
101 / 74 / 17
Регистрация: 23.07.2014
Сообщений: 686
Записей в блоге: 1
29.07.2014, 19:42 #12
Некто Герб Саттер говорит, что помечать функции как inline - полнейшая дурь. Примерно такая же, как auto и register. Вы ну вот прям совсем никак, даже ключами компиляции, не заставите компилятор заинлайнить вызов. Как было сказано, это что-то типа нижайшей просьбы, которую стандартом разрешено полностью игнорировать. Компилятор злобно хохочет и потирает лапы.
0
Evg
Эксперт CАвтор FAQ
17818 / 6028 / 388
Регистрация: 30.03.2009
Сообщений: 16,555
Записей в блоге: 26
29.07.2014, 22:47 #13
Если речь идёт о языке программирования C++, то ключевое слово inline несёт в себе гораздо больший смысл, чем нижайшая просьба компилятору: http://www.cyberforum.ru/blogs/18334/blog93.html

Современные компиляторы давно стали настолько продвинуты, что в контексте нижайшей просьбы им модификатор inline не нужен - они сами разберутся, чего надо инлайнить, а чего нет. Но вот с точки зрения концепции Си++ правильно было бы inline-функцию целиком (т.е. вместе с телом) помещать вовнутрь файла *.h и не иметь никакой реализации в *.cpp

Добавлено через 45 секунд
А... SatanaXIII уже всё объяснил, не заметил сразу
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.07.2014, 22:47
Привет! Вот еще темы с ответами:

Если в файле с новой строки есть 5 пробелов - заменить их на новый абзац, отделяющийся пустой строкой - C++
задача:дан текстовый файл.Если в нем с новой строки есть 5 пробелов то заменить их на новый абзац отделяющийся 1 пустой...

Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? - C++
Я конечно, понимаю, что на такие вопросы отвечают "почитай книжку". Я читала, честное слово:) Конкретно. Есть функция void jacobi (...

Дает ли register прирост в скорости? И есть ли толк в inline? - C++
Всем привет Читал про типы данных и набрел на такую переменную как register. Написано что если ее объявить в программе то, она...

Как можно записывать в существующие файл, в котором уже есть информация? - C++
#include <cstdlib> #include <cstdio> #include <fstream> #include <string> #include <iostream> #include <cstdlib> int View(int...


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

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

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