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

inline-объясните что такое - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Подготовка к экзамену http://www.cyberforum.ru/cpp-beginners/thread99836.html
У меня скоро экзамен по С++. Там задачи: 1. Вычислить сумму:2/3+3/4+4/5+...+10/11. 2. Найти сумму ряда 2+4+6+…20. 3. Даны 2 действительных числа х, у (Х "не равно" У). Меньшее из этих 2-х чисел заменить их полусуммой, а большее – их удвоенным произведением. 4. Даны 3 числа. Возвести в квадрат те из них, значения которых не отрицательны. 5. Даны 3 числа. Возвести в квадрат и сложить те из...
C++ Как прописать консольную команду Не подскажете как в консольном приложениии С++ прописать консольную команду Windows XP и как добввить ключь в реестр? http://www.cyberforum.ru/cpp-beginners/thread99825.html
C++ Необходимо разработать программу генерации ПСП
Прошу помочь. Кто учился на ЗС, ЗИ, Зм, в общем защитники инфы и те кто знаком с основами инф. Безопасности (криптографии) - Необходимо разработать программу генерации ПСП. Вид ГПСП: Пороговый генератор. Количество ЛРЗР: 5 Полином обратного соединения для линейного рекуррентного регистра сдвига ЛРЗР: (25,3,0); (11,2,0); (17,6,0); (7,1,0); (18,7,0). полученную последовательность в двоичном...
C++ Найти сумму элементов последовательности
Задана некоторая последовательность чисел: n(n-1)...(n-k)+(n-1)(n-2)...(n-k-1)+(k+1)k(k-1)...1 Как я понял задание, то вводя с клавиатуры значения n и k необходимо найти сумму элементов последовательности. Не знаю даже, за что зацепиться. Еще нужно ввести еще число членов этой последовательности. В общем как-то надо раскрутить... Язык программирования: С. Использовать можно только функции...
C++ Битовые поля http://www.cyberforum.ru/cpp-beginners/thread99799.html
Подскажите пожалуйста, как мне сохранить две цифры с помощью битовых полей?
C++ Дана последовательность из n целых чисел. Найти минимальный элемент в этой последовательности. помогите пожалуйста решить задачку!!! Дана последовательность из n целых чисел. Найти минимальный элемент в этой последовательности. заранее спасибо!!! подробнее

Показать сообщение отдельно
Nick Alte
Эксперт С++
1590 / 982 / 115
Регистрация: 27.09.2009
Сообщений: 1,897
Завершенные тесты: 1
28.02.2010, 13:38     inline-объясните что такое
Цитата Сообщение от МедведЪ Посмотреть сообщение
1.Перегрузка ф-ии-следует ли все функции перегрузить?
"Перегрузка функции" в С++ означает, что ты можешь завести несколько функций с одним и тем же именем. Они будут различаться типами аргументов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int F(int i);  // раз F
double F(double d);  // два F
void F(const char *c);  // три F
void F();   // четыре F
float F(int f);  // а вот так нельзя, у нас уже есть F, принимающая int. Разность возвращаемых типов не учитывается. Компилятор выдаст ошибку.
// Вызовы:
int main()
{
    int i = F(1); // первая
    double d = F(2.0);  // вторая
    F("some string");  // третья
    F();  // четвёртая
    float f = F(1);  // снова первая, но целочисленный результат автоматически преобразуется во float
}
"Перегрузить все функции" - какое-то нелепое и бессмысленное занятие. Перегрузить можно любую функцию, но делать это следует при наличии такой надобности.

Цитата Сообщение от МедведЪ Посмотреть сообщение
2.inline-объясните что такое
inline - это функция, которая не вызывается, а встраивается прямо в месте вызова. Позволяет экономить время при вызове простых и несложных функций. Хотя компилятор сам соображает, следует ли такую функцию и в самом деле встраивать, или лучше вынести, формально она считается "несуществующей", то есть, под неё как бы не отводится отдельное место (хотя в реальности она вполне может стать полноправной отдельной функцией, если так решит компилятор) и как таковая она не может вызываться из других единиц трансляции только по прототипу, необходимо иметь её полное определение. Компилятор не возражает против объявлений одной и той же inline-функции в нескольких единицах трансляции. Таким образом, место таких функций скорее в заголовках, чем в .cpp-файлах. Метод, объявленный прямо в теле класса, автоматически считается инлайновым.

Пример:
C++
1
2
3
4
5
6
7
8
9
10
11
inline double square(double v)
{
    return v*v;
}
 
int main()
{
    double s;
    for(int i=0; i<10000000; ++i)
        s = square(i);
}
Без inline вызов функции square тратил бы дополнительные такты на передачу параметров, вызов, чистку стека и возврат. В результате этот десятимиллионный цикл выполнялся бы дольше.
Некоторые современные компиляторы имеют возможность встраивать вызовы не-inline функций. В Visual Studio это называется Link time code generation и включается в общих настройках проекта (General), в Linker - Optimization - Link Time Code Generation и в C/C++ - Optimization (опции Whole Program Optimization = Enable link-time code generation и Inline function expansion = Any suitable).

Цитата Сообщение от МедведЪ Посмотреть сообщение
3.каким образом,если вызвать функции милионы раз,программа будет занимать все больше и больше в памяти?
При каждом вызове функции на стеке размещается адрес возврата и набор параметров и локальных переменных. Таким образом, цепочка из миллиона последовательных вызовов забьёт стек мегабайтами данных. Однако при возврате из функции занятая ей на стеке память высвобождается. Это значит, что тебе надо следить только за тем, чтобы в разумных рамках оставалась вложенность вызовов, а не их количество. Впрочем, по нынешним временам есть только два распространённых способа загадить весь стек: бесконечная рекурсия, то есть, непрекращающаяся цепочка вызовов (банальная ошибка в логике программы), или попытка создать слишком крупный массив в качестве локальной переменной.
 
Текущее время: 17:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru