Это может быть дурной тон, в зависимости от "большей картины" приложений, использующих заголовок.Помещая реализацию в заголовок, вы требуете модификации заголовка, когда эта реализация изменяется ... такие изменения вызывают / требуют перекомпиляции объекта клиента во многих системах сборки (например, make
).В отличие от этого, внеплановые изменения могут потребовать повторного связывания, и при использовании совместно используемых библиотек эти библиотеки можно будет заменить без каких-либо изменений в клиентских приложениях.Следовательно, когда нет особой причины использовать встраивание, низкоуровневые заголовки, используемые многими приложениями, как правило, предпочитают внеплановую реализацию.Это особенно актуально, когда ожидается, что реализация потребует изменений.
Другая причина, по которой некоторые люди предпочитают разделять реализацию, состоит в том, чтобы не вводить в заблуждение людей, читающих API как форму документации.Когда читать меньше, это, как правило, понятнее, хотя иногда реализация помогает понять функциональность.Но программисты, которые видят реализацию, склонны думать о поведенческих последствиях и последствиях для производительности и создавать клиентский код, который зависит от этого, даже если интерфейс не дает таких строгих гарантий: это делает клиентский код хрупким в случае изменения реализации.*