Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。8,338件1最近「inline」という仕組みを知り色々と調べているのですが、ロベールのC++教室やQoosky等の記事では「inline関数の実装はヘッダに記述する」と記述があります(ロベールではクラスの宣言と記述はありますが)。ここで一つ確認なのですが、これはコンパイル時に処理を埋め込む際に埋め込む内容が明らかである必要であり、故にヘッダーに実装内容が記述されているべきである。いう解釈でよろしいのでしょうか。以前inlineを試しに使ってみようとしたところ、誤っていつも通りcpp側に実装を記述してしまいましたが一応問題なく動いていました。再度.cpp読み込んでinline関数呼び出し側に埋め込み...という(私の勝手なイメージの)流れによりcppを読み込むオーバーヘッドが生まれている為無駄であるという事になるのでしょうか。票4コンパイル時に処理を埋め込む際に埋め込む内容が明らかである必要はい、そう考えてOKです。インラインとした関数が複数の翻訳単位で異なる内容であることを防ぐために同一ヘッダファイル中にある同一の関数定義を使うためでもあります。インライン置換をするのが望ましいことを指示する。望ましいだけで「しなければならない」義務付けはされていないのでいつも通りcpp側に実装を記述してしまいましたが一応問題なく動いていました。いうのはごく普通(言語規格書に合致した正しい挙動)です。インライン宣言されている関数の関数定義が関数利用時点で明らかになっていない場合、インライン展開せずに通常の関数呼び出し手続きが生成されます。インライン展開すると逆効果である(サイズ優先最適化指示と反するなど)とコンパイラが判断した場合にも同様。提示の「勝手なイメージ」動作は、言語規格書上の「翻訳単位」という概念からいくと、行わないことが定められています。言語仕様を逸脱してでも高度最適化を優先する処理系では、行うかもしれませんが、オイラの使っている組み込み系コンパイラ複数種類のどれも、そのような最適化は行っていません。|1コンパイラーはオブジェクトファイルを生成し、リンカという別のツールが複数のオブジェクトファイルを結合して実行ファイルを生成します。再度.cpp読み込んでinline関数呼び出し側に埋め込み...というようなステップとはならず774RRさんが回答されているように通常の関数呼び出しとして結合されます。Generationなど、コンパイラーとリンカが協調してリンク時に最適化を行うことがあります。コンパイラーが最適と判断すればリンク時に再コンパイルが行われインライン展開が行われます。解決は行っていないようです。収まらない可能性が上がるだけでおいしくないという判断なのかな、と妄想してみたりしています。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。