Подтвердить что ты не робот

Встроенный в определение и декларирование

Во время недавнего экспертного обзора другой инженер-программист предположил, что я указываю, что функция inline inline в определении (вне класса), а также в объявлении (внутри класса). Его аргумент заключается в том, что "отмечая его встроенным, вы говорите, что этот метод будет выполняться намного быстрее, чем метод без встроенного метода, и что вызывающим абонентам не нужно беспокоиться о чрезмерных вызовах метода".

Это правда? Если я являюсь пользователем класса, действительно ли я беспокоюсь о чрезмерных вызовах метода? Есть ли что-то не так, когда вы указываете его как встроенный в определение и декларацию? С++ часто задаваемые вопросы гласит:

Лучшая практика: только в определении вне тела класса.

Итак, кто здесь?

4b9b3361

Ответ 1

Это звучит как две совершенно несвязанные вещи. Ввод inline как в декларации в классе, так и в определении вне класса не требуется. Достаточно положить его в одно из объявлений.

Если вы говорите о добавлении inline в файл .cpp, где там определена функция, и эта функция является членом public, тогда вы должны не делать это. Люди, которые вызывают функции inline, должны иметь для них свои определения. Стандарт С++ требует этого.

Ответ 2

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

Это вздор. Маркировка функции inline не гарантирует, что функция фактически будет физически встроена; даже если это так, не гарантирует, что ваша функция будет "быстрее".

Отметив определение inline, а также объявление, вы просто путаете вещи, притворяясь своим пользователем, что есть какая-либо гарантия на что-либо, чего нет...

Если я являюсь пользователем класса, действительно ли я беспокоюсь о чрезмерных вызовах метода?

Не совсем.

На самом деле, на самом деле, единственный раз, когда вы должны писать inline, вам нужно заставить встроенное хранилище по какой-либо причине (независимо от того, происходит ли inlining, использование ключевого слова всегда влияет на применение правила одного определения к вашему функция & hellip, хотя это требует редко); в противном случае пусть компилятор решит, какие функции встроены, и двигайтесь дальше. Следствием этого является то, что вам не нужно беспокоиться о том, чтобы использовать ключевое слово, чтобы притворяться, что оно документирует что-либо.