@haliverd

C++, объявления функций и их расположение в памяти, как обстоят дела?

Доброго времени суток. Язык C++. Далее последуют описания функций:
1)
class test{
 void func(int x);
}
void test::func(int x){
%some_code%
}

2)
class test{
 func(int x){
 %some_code%
 }
}


Вопрос в том, есть ли разница, как описывать эти функции, и, если разница есть, то в чем? Будут ли отличия в их работе? Является ли пример 2 примером того, как лучше не делать в больших проектах?
  • Вопрос задан
  • 447 просмотров
Пригласить эксперта
Ответы на вопрос 2
Nipheris
@Nipheris Куратор тега C++
Является ли пример 2 примером того, как лучше не делать в больших проектах?


Большинство компиляторов будут инлайнить функцию в этом случае.

Разница очень простая - в первом случае вы сможете вынести реализацию в отдельную единицу компиляции, а во втором - нет. Зачем это делать - читайте внимательно про compilation unit. Особенно, если вы пришли из языка, где такой задачи, как разделение include-файлов и файлов реализации нет в принципе.
Конечно, есть случаи когда вынести реализацию в отдельный cpp-шник невозможно. Стандартный пример - шаблонные классы. Для них реализации всех функций все равно придется указывать в файле, который будет инклудиться. Поэтому особой разницы между 1 и 2 в этом случае нет.

это как-то связано с компилятором и тем, как он выделяет под функцию память.

Тогда почитайте про inlining функций, это видимо то, что вы слышали.
Ответ написан
@vilgeforce
Раздолбай и программист
Минус от второго варианта в том, что объявление неотделимо от реализации. В итоге АдЪ с инклюдами и т.п. IMHO.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы