[解決済み] なぜC++のインライン関数はヘッダーにあるのですか?
2022-05-13 23:25:30
疑問点
<サブタイトル NB これはインライン関数の使い方や動作についての質問ではなく、なぜそのようにするのかについての質問です。
クラスのメンバ関数の宣言では、関数の定義に
inline
として定義する必要はなく、実際に関数を実装するだけでよいのです。 例えば、ヘッダーファイルの中で
struct foo{
void bar(); // no need to define this as inline
}
では、なぜクラス関数のインライン実装である
があります。
をヘッダーファイルの中に置く必要があるのでしょうか?なぜインライン関数を
.cpp
ファイルに書くことができないのでしょうか?もし私がインラインの定義を
.cpp
ファイルにインライン定義を入れようとすると、次のようなエラーが発生します。
error LNK2019: unresolved external symbol
"public: void __thiscall foo::bar(void)"
(?bar@foo@@QAEXXZ) referenced in function _main
1>C:\Users\Me\Documents\Visual Studio 2012\Projects\inline\Debug\inline.exe
: fatal error LNK1120: 1 unresolved externals
どのように解決するのですか?
の定義は
inline
関数はヘッダファイルである必要はないのですが、そのため
のような一つの定義ルール (
ODR
)
インライン関数の場合、その関数を使用するすべての翻訳ユニットで、同一の定義が存在しなければなりません。
これを達成する最も簡単な方法は、ヘッダーファイルに定義を置くことです。
もし、関数の定義を単一のソースファイルに置きたいのであれば、関数を宣言してはいけません。
inline
. 宣言されていない関数は
inline
と宣言されていない関数は、コンパイラがその関数をインライン化できないことを意味するものではありません。
関数を宣言すべきかどうか
inline
を宣言すべきかどうかは、通常、どのバージョンの
定義規則
のどのバージョンに従うのが最も理にかなっているかによって選択されるべきです。
inline
を追加し、その後の制約によって制限されることは、ほとんど意味がありません。
関連
-
[解決済み】非静的メンバ関数への参照を呼び出す必要がある
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】C++プログラムでのコンソールの一時停止
-
[解決済み】エラー:不完全な型へのメンバーアクセス:前方宣言の
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 最小限の驚き」と「変更可能なデフォルトの引数
-
[解決済み] using namespace std;」はなぜバッドプラクティスだと言われるのですか?
-
[解決済み] なぜテンプレートはヘッダーファイルでしか実装できないのですか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み】C/C++の"-->"演算子とは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】エラー。switchステートメントでcaseラベルにジャンプする
-
[解決済み】オブジェクト引数のない非静的メンバ関数の呼び出し コンパイラーエラー
-
[解決済み】クラスのコンストラクタへの未定義参照、.cppファイルの修正も含む
-
[解決済み】Visual Studioのデバッガーエラー。プログラムを開始できません 指定されたファイルが見つかりません
-
[解決済み】'std::cout'への未定義の参照
-
[解決済み】c++で.txtファイルから2次元の配列に読み込む
-
[解決済み】インライン関数を使用する場合と使用しない場合とは?