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

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

Восстановить пароль Регистрация
 
Alex Z
27 / 1 / 0
Регистрация: 29.06.2011
Сообщений: 136
09.10.2012, 13:19     Записать правильно встраиваемую функцию #1
Разные источники предлагают немного отличающиеся записи:

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 можно пихать куда угодно? Хоть в прототип функции, хоть в её реализацию, или в оба места. Как угодно что ли? Странно, что в учебниках по С++ ничего не сказано, про такие вольности.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2012, 13:19     Записать правильно встраиваемую функцию
Посмотрите здесь:

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

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

Текущее время: 18:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru