ホームページ > バックエンド開発 > C++ > インラインメンバー関数を .cpp ファイルで定義してもインライン化できますか?

インラインメンバー関数を .cpp ファイルで定義してもインライン化できますか?

Patricia Arquette
リリース: 2024-10-26 19:03:02
オリジナル
694 人が閲覧しました

Can Inline Member Functions Be Defined in a .cpp File and Still Be Inlined?

C .cpp ファイルのインライン メンバー関数: ジレンマと解決策

C では、インライン メンバー関数は通常、次のヘッダー ファイルで宣言されます。効率の理由。ただし、特定のシナリオでは、.cpp ファイルに関数を実装することが必要になる場合があります。このような状況を詳しく見てみましょう:

循環依存関係のある次のシナリオを考えてみましょう:

A.h

<code class="cpp">#pragma once
#include "B.h"

class A {
    B b;
};</code>
ログイン後にコピー

B.h

<code class="cpp">#pragma once

class A;

class B {
    inline A getA();
};</code>
ログイン後にコピー

循環依存関係を解消するには、getA の実装を B.cpp:

B.cpp

<code class="cpp">#include "B.h"
#include "A.h"

inline A B::getA() {
    return A();
}</code>
ログイン後にコピー

ジレンマ

ヘッダーと .cpp ファイルの両方に inline キーワードを配置すると、関数のインライン展開に影響しますか?

解決策

残念ながら、.cpp ファイルに inline キーワードがあるにもかかわらず、B.cpp 自体内で使用されない限り、コンパイラは getA をインライン化しません。これは、コンパイラがインライン関数に遭遇するたびにその定義を要求するためです。通常、関数をヘッダー ファイルに配置すると、この可用性が保証されます。

ベスト プラクティス

C の FAQ によると、ヘッダー ファイルでインライン関数を定義することが必須です。これらを .cpp ファイルに配置すると、未解決の外部エラーが発生する可能性があります。

代替解決策

提供されたシナリオでは、インライン関数を .cpp ファイルに配置する代替解決策は提案されていません。 cpp ファイル。

以上がインラインメンバー関数を .cpp ファイルで定義してもインライン化できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート