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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 13, средняя оценка - 4.62
^Tecktonik_KiLLeR
1159 / 441 / 22
Регистрация: 23.06.2009
Сообщений: 6,230
Завершенные тесты: 1
#1

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

28.02.2010, 11:18. Просмотров 1707. Ответов 3
Метки нет (Все метки)

1.Перегрузка ф-ии-следует ли все функции перегрузить?
2.inline-объясните что такое
3.каким образом,если вызвать функции милионы раз,программа будет занимать все больше и больше в памяти?
пока что такие вопросы...
книга С++ за 21 день

Добавлено через 28 минут
4.выдает ошибку
Unhandled exception at 0x00401010 in proba.exe: 0xC00000FD: Stack overflow.
при рекурсии.Функция которая принимает число и удваивает ее
C++
1
2
3
4
5
6
int fib(int n){
 
if(n==1)return 1;
else if(n==0)return 0;
else return(fib(n)+fib(n));
}
Добавлено через 22 секунды
жалуется на
Цитата Сообщение от МедведЪ Посмотреть сообщение
else return(fib(n)+fib(n));
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2010, 11:18     inline-объясните что такое
Посмотрите здесь:

Объясните что такое npos? - C++
Объясните что такое s.npos, как работает? Погуглил не чего существенного не нашел.

Объясните пожалуйста, что такое i, j, k в программе - C++
#include "stdafx.h" #include "stdio.h" #include "stdlib.h" #include "locale.h" #include "conio.h" int main() { int...

Объясните пожалуйста что такое многофайловый проект - C++
Объясните пожалуйста что такое многофайловый проект. Гуглила, толком ничего не нашла. Есть вот такое задание: В текстовом файле...

объясните пожалуйста. что такое struct STUDENT? - C++
include <conio.h> #include <iostream> struct STUDENT { char fio; /* фамилия и.о. */ char oc; /* 5 оценок + '\n' + '\0' */ }; ...

Заголовочный фаил <algorithm> (объясните что это такое) - C++
Здравствуйте, товарищи! Что такое #include &lt;algorithm&gt;? Какие она имеет функции или макросы? И если можно их предназначение?

Объясните что такое массив объединений и с чем его едят - C++
Написать программу удаления заданного числового значения из массива объединений. Объясните что такое массив объединений и с чем его...

Объясните пожалуйста как тут работает сортировка и что такое ostream_iterator<string> - C++
вот код. Объясните пожалуйста как тут работает сортировка, сам не могу разобраться. Оссобенно это ostream_iterator&lt;string&gt; не понимаю...

Что за пустые шаблоны template <> struct/inline? - C++
что за пустые шаблоны template &lt;&gt; за которыми следуют class/struct/inline? По многочисленным источникам в c++ шаблоны имеют вид,...

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

Объясните что возвращает функция - C++
Здравствуйте. int is_file_folder(const TCHAR *pth) { HANDLE hfind; WIN32_FIND_DATA wfd; hfind =...

Объясните, что проверяет условие if - C++
char str, *Slovo; printf(&quot;Vvedite text: &quot;); if ( !fgets(str,256, stdin)) { fprintf(stderr, &quot;Ne...

объясните пожалуйста, что это - C++
И что с этим делать)


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
M128K145
Эксперт С++
8283 / 3502 / 143
Регистрация: 03.07.2009
Сообщений: 10,706
28.02.2010, 12:17     inline-объясните что такое #2
МедведЪ, у тебя тупо переполнение стека, напиши так
C++
1
else return (fib(n) << 1);
Тогда стек переполнится не так быстро
Nick Alte
Эксперт С++
1608 / 1000 / 118
Регистрация: 27.09.2009
Сообщений: 1,927
Завершенные тесты: 1
28.02.2010, 13:38     inline-объясните что такое #3
Цитата Сообщение от МедведЪ Посмотреть сообщение
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.каким образом,если вызвать функции милионы раз,программа будет занимать все больше и больше в памяти?
При каждом вызове функции на стеке размещается адрес возврата и набор параметров и локальных переменных. Таким образом, цепочка из миллиона последовательных вызовов забьёт стек мегабайтами данных. Однако при возврате из функции занятая ей на стеке память высвобождается. Это значит, что тебе надо следить только за тем, чтобы в разумных рамках оставалась вложенность вызовов, а не их количество. Впрочем, по нынешним временам есть только два распространённых способа загадить весь стек: бесконечная рекурсия, то есть, непрекращающаяся цепочка вызовов (банальная ошибка в логике программы), или попытка создать слишком крупный массив в качестве локальной переменной.
Genius Ignat
1235 / 773 / 44
Регистрация: 16.09.2009
Сообщений: 2,014
28.02.2010, 17:18     inline-объясните что такое #4
Так же добавлю: Если настройка проекта debug: inline не работает: 100%.
Если Release: то компилятор может реагировать(считать)что это inline функция или не inline.
Если кому надо, могу кинуть источник на эту инфу.
Yandex
Объявления
28.02.2010, 17:18     inline-объясните что такое
Ответ Создать тему
Опции темы

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