Если при добавлении функции в класс снимать флажок «встроенный», в classname.h нужен только прототип функции? - PullRequest
0 голосов
/ 30 мая 2011

Кто-нибудь может мне помочь разобраться с этим?Я использую функцию-член Winzard, чтобы добавить функцию в класс.Если снять флажок «Встроенный», в файле classname.h будет отображаться только прототип функции, как показано ниже:

CBox operator+(const CBox& aBox) ;

, а в файле classname.cpp есть полная функция:

CBox CBox::operator+(const CBox& aBox)     {
    return CBox();
}

Однако, если я установлю флажок Встроенный, полная функция появится в файле classname.h, как показано ниже:

CBox operator+(const CBox& aBox)
{
    return CBox();
}

И ничего не появится в classname.cpp.

Я не являюсьуверен ли это из-за встроенной проверки или нет?В любом случае, действительно ли это большая разница между использованием встроенной и не встроенной функции, о которой я должен беспокоиться?

Другое дело, что если я установлю флажок Встроенная, то это будет оператор CBox + ...... Но если яснимите флажок Встроенный, функция CBox Cbox :: operator +.В чем другое значение?

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 30 мая 2011

Если вы хотите, чтобы ваша функция была встроенной, то компилятор должен знать об этом.Таким образом, вы должны поместить его в файл заголовка.

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

1 голос
/ 30 мая 2011

Когда вы выбираете in-line, это означает, что код будет сброшен в месте вызова. По этой причине вся реализация должна быть в заголовочном файле. Если вы не выберете inline, он будет помещен в файл cpp, так как одна (и только одна) копия должна быть скомпилирована и связана.

Встроенный код может сделать ваше приложение больше, но считается быстрее, если нет процедурных вызовов. Используйте вставку, если реализация мала.

...