Встроенный в определение и декларирование
Во время недавнего экспертного обзора другой инженер-программист предположил, что я указываю, что функция inline
inline
в определении (вне класса), а также в объявлении (внутри класса). Его аргумент заключается в том, что "отмечая его встроенным, вы говорите, что этот метод будет выполняться намного быстрее, чем метод без встроенного метода, и что вызывающим абонентам не нужно беспокоиться о чрезмерных вызовах метода".
Это правда? Если я являюсь пользователем класса, действительно ли я беспокоюсь о чрезмерных вызовах метода? Есть ли что-то не так, когда вы указываете его как встроенный в определение и декларацию? С++ часто задаваемые вопросы гласит:
Лучшая практика: только в определении вне тела класса.
Итак, кто здесь?
Ответы
Ответ 1
Это звучит как две совершенно несвязанные вещи. Ввод inline
как в декларации в классе, так и в определении вне класса не требуется. Достаточно положить его в одно из объявлений.
Если вы говорите о добавлении inline
в файл .cpp
, где там определена функция, и эта функция является членом public
, тогда вы должны не делать это. Люди, которые вызывают функции inline
, должны иметь для них свои определения. Стандарт С++ требует этого.
Ответ 2
Отметив его в строке, вы говорите, что этот метод будет выполняться намного быстрее, чем метод не-встроенного, и что вызывающим абонентам не нужно беспокоиться о чрезмерных вызовах метода.
Это вздор. Маркировка функции inline
не гарантирует, что функция фактически будет физически встроена; даже если это так, не гарантирует, что ваша функция будет "быстрее".
Отметив определение inline
, а также объявление, вы просто путаете вещи, притворяясь своим пользователем, что есть какая-либо гарантия на что-либо, чего нет...
Если я являюсь пользователем класса, действительно ли я беспокоюсь о чрезмерных вызовах метода?
Не совсем.
На самом деле, на самом деле, единственный раз, когда вы должны писать inline
, вам нужно заставить встроенное хранилище по какой-либо причине (независимо от того, происходит ли inlining, использование ключевого слова всегда влияет на применение правила одного определения к вашему функция & hellip, хотя это требует редко); в противном случае пусть компилятор решит, какие функции встроены, и двигайтесь дальше. Следствием этого является то, что вам не нужно беспокоиться о том, чтобы использовать ключевое слово, чтобы притворяться, что оно документирует что-либо.