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

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

Войти
Регистрация
Восстановить пароль
 
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
#1

Записать правильно встраиваемую функцию - C++

09.10.2012, 13:19. Просмотров 458. Ответов 4
Метки нет (Все метки)

Разные источники предлагают немного отличающиеся записи:

1) Учебник Либерти так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
 
inline int Double(int); // прототип функции
 
int main()
{
    int target;
 
    cout << "Enter a number to work with: ";
    cin  >> target;
    
    target = Double(target);
    cout << "Target: " << target << endl;
 
    target = Double(target);
    cout << "Target: " << target << endl;
 
    target = Double(target);
    cout << "Target: " << target << endl;
    
    char response;        
    std::cin >> response; 
    
    return 0;
}
 
int Double(int x)
{
    return 2*x;
}
То есть слово inline перед прототипом функции, а реализация функции как обычно.

2) Учебник Шилдт:
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
using namespace std;
 
inline int Double(int x)
{
    return 2*x;
}
 
int main()
{
       /* ... */    
}
3) В Интернете такой вариант видел:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
using namespace std;
 
int Double(int); // прототип функции
 
int main()
{
       /* ... */    
}
 
inline int Double(int x)
{
    return 2*x;
}
4) Сейчас сам написал так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
inline int Double(int); // прототип функции
 
int main()
{
       /* ... */    
}
 
 
inline int Double(int x)
{
    return 2*x;
}
Причём все варианты компилируются без ошибок и работают. Но при этом я же не знаю, везде там будет встраиваемая функция или нет? Может компилятор видит неправильную запись и просто игнорирует её без предупреждения и обращается к функции как обычно, я то не в курсе.

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

Заменить макрос на встраиваемую функцию - C++
Готовлю вопросы к экзамену, непонятны некоторые пункты: 1) Заменить макрос на встраиваемую функцию #define A VERAGE(a,b)...

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

Как правильно записать функцию? - C++
Подскажите, пожалста, можно ли так делать: #include &lt;math.h&gt; double F1(double x,double y) { double f1=y+1.32-sin(x); ...

Как правильно записать функцию? - C++
Очень интересует как записать корень квадратный 3 степени w=\sqrt{x^6+ln^2y}+\frac{e^{\left|x-y \right|}\, \left|x-y...

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

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

4
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
09.10.2012, 13:50 #2
Слово inline вообще мало чего значит. Оптимизирующий компилятор может встраивать не помеченные функции и не встраивать помеченные...
Если очень интересно, можешь включить генерацию ASM-листинга и посмотреть, встроилась она или нет.
1
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
10.10.2012, 08:43  [ТС] #3
Цитата Сообщение от Deviaphan Посмотреть сообщение
Слово inline вообще мало чего значит. Оптимизирующий компилятор может встраивать не помеченные функции и не встраивать помеченные...
Если очень интересно, можешь включить генерацию ASM-листинга и посмотреть, встроилась она или нет.
То есть мне вообще не использовать слово inline?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1305 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
10.10.2012, 08:50 #4
Используй, когда считаешь нужным, но компилятор всегда может тебя проигнорировать (имеет на это право в соответствии с документацией).
Я предпочитаю второй способ для функций и третий для методов класса, когда не пишу реализацию внутри самого класса.

Добавлено через 49 секунд
Без указания inline нельзя написать реализацию не шаблонной функции в хэдэре.
1
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
10.10.2012, 09:02  [ТС] #5
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я предпочитаю второй способ для функций и третий для методов класса, когда не пишу реализацию внутри самого класса.
Понял.
0
10.10.2012, 09:02
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2012, 09:02
Привет! Вот еще темы с ответами:

Как правильно вызвать функцию с указателем на другую функцию как параметр - C++
Вот вариант: double f(double x) { ... } double k(double (*f)(double), double y) { ...

Как правильно записать - C++
Как правильно записать sin3 x? Почему-то ни pow(sin(x*3.14/180),3), ни (sin(x*3.14/180))*(sin(x*3.14/180))*(sin(x*3.14/180)) не дают...

Как правильно записать? - C++
y=sin|x|/0,1+9,4sin(3x-2,5) Добавлено через 13 минут матем. формулу

как правильно записать - C++
3,5*10в минус 2 степени


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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