Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。686件1行数のすくないコードはヘッダーに書き、行数が多いコードは宣言だけヘッダーに書き定義をソースファイルに場合と、ヘッダーに関数の宣言と定義を書き、ヘッダーで完結する場合との違いを知りたいです。それとヘッダーに書いた場合インラインになるとあるがインラインはその関数が使われる時に処理が埋め込まる、とそうじゃない非インラインの時の処理とでどういった違いがあるのかが知りたいです。質問文を完結させてください。0:481処理の軽いもの重いもの部分も気になります。許容するA)は比較的理解しやすいですが、同時に誤解されがちな性質でもあります。インライン関数=「優先的にインライン展開の候補となりえる関数」という解釈です。B)は少々分かりづらいのですが、複数ヘッダファイルと複数ソースファイルから構成されるC++プログラムでは重要な意味を持ちます。{...}した場合、同ヘッダファイルを異なるソースファイルから#includeすると、各ソースファイルからコンパイルされるオブジェクトファイルそれぞれに関数fooの実体が含まれる状態になります。この状況でプログラム全体をリンクすると関数fooの実体が2回登場するため、正常なプログラムが生成されなくなります。補足:「同一実体なら2個のうちどちらを選んでも同じでは?」と思われるかもしれませんが、コンパイラやリンカからは同一実体であることを判断するのは非常に難しいのです(もしくはコストが高い)。C++言語では実体重複が生じた時点でアウト、言い換えると「何が起きても保証しませんよ」という仕様になっています。Ruleとよばれる規則)行数のすくないコードはヘッダーに書き、行数が多いコードは宣言だけヘッダーに書き定義をソースファイルに場合と、ヘッダーに関数の宣言と定義を書き、ヘッダーで完結する場合との違いを知りたいです。行数の少ない(=処理の少ない)関数はインライン展開の効果が大きいため、複数ソースファイルからincludeされるヘッダファイルにインライン関数として記述されるケースが多いです。行数の多い(=処理が多い)関数はインライン展開の効果が小さい、もしくは生成されるコードが肥大化するという負の側面が出てきてしまうため、ソースファイルに非インライン関数として記述されるケースが多いです。上記はあくまでも慣例的なものです。ヘッダファイル中に全てをインライン関数として記述することも可能ですし、ヘッダファイルは宣言のみでソースファイル中に全ての関数定義を記述することも可能です。function)の存在を無視しています。)ヘッダーに書いた場合インラインになるとあるがインラインはその関数が使われる時に処理が埋め込まる、とそうじゃない非インラインの時の処理とでどういった違いがあるのかが知りたいです。インライン関数・非インライン関数の違いは前述の通りです。「ヘッダーに書いた場合インラインになる」は少し嘘が含まれています。ヘッダファイルに書けば自動的にインライン関数になるわけではなく、一定の条件を満たす必要があります。書き、外部に対するインターフェイスとして各種の宣言をヘッダファイルに書くのが原則です。ヘッダファイルにはクラス定義だとか、関数の宣言のみを書くべきです。ソースファイルひとつがひとつのコンパイル単位であり、すべてのコンパイル単位のコンパイルが完了してからリンクして実行ファイルを作るという手順を理解してください。あるソースファイルをコンパイルしているときには、コンパイラは他のソースファイルに書かれている関数の中身を知り得ません。ヘッダファイルを通じて関数の型を知っているだけです。ようにしたいとき、別のコンパイル単位にあるものは中味がわからないので埋め込むことが出来ません。同じコンパイル単位に関数の実装があるようにしなければならず、そのような特別な場合の措置としてインライン化可能関数の定義をヘッダファイルに書くことで解決するわけです。現在の高度な言語処理系はリンク時にコンパイラに差し戻して最適化も含めたコンパイルをするようなものもあるので、そういう処理系の場合はプログラマがインライン化に配慮する必要はあまりありません。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。StudioのC++開発において、バイナリファイルを静的ライブラリに埋め込んで実行ファイルから利用する方法はありますでしょうか?0opencvの関数CV_CAP_PROP_FRAME_HEIGHTの中身が知りたいです。1CUDAのNVCCでコマンドプロンプトでコンパイルしたいのですがエラーが出てきます。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。