Когда я пишу простой (не шаблонный) класс, если реализация функции предоставляется «прямо на месте», она автоматически обрабатывается как inline
.C++ template and inline
class A {
void InlinedFunction() { int a = 0; }
// ^^^^ the same as 'inline void InlinedFunction'
}
Как насчет этого правила при разговоре о шаблонных классах?
template <typename T> class B {
void DontKnowFunction() { T a = 0; }
// Will this function be treated as inline when the compiler
// instantiates the template?
};
Кроме того, как это inline
правило применяется к невложенным шаблонным функциям, как
template <typename T> void B::DontKnowFunction() { T a = 0; }
template <typename T> inline void B::DontKnowFunction() { T a = 0; }
Что произойдет в первом и во втором случае здесь?
спасибо.
Могу ли я спросить, почему вы хотите узнать ответ на этот вопрос? Я сделал довольно много C++-кодирования, и я не сталкивался с обстоятельствами, в которых это имело большое значение. –
@ Benoît То же самое здесь, но когда я писал несколько фрагментов кода на основе шаблонов, я понял, что на самом деле я не знаю, что происходит в том случае, о котором я рассказывал. Так почему бы не задать вопрос? :) –
Не уверен, что вы ищете в вопросе класса, но меня интересует ответ: o) Я не верю, что что-то особенное происходит с DontKnowFunction() и встроенным. Если тело является частью декларации класса, тогда используется его подразумеваемая неявная вставка inline, и тело находится вне декларации. – skimobear