重複の可能性:
C++ のインライン関数
ヘッダー ファイルにクラスを完全に実装すると、コンパイラは何をしますか? 典型的な例は次のとおりです。
class MyException
{
public:
explicit MyException(const char* file, int line) file(file), line(line) {};
const char* getFile() const { return file };
int getLine() const { return line };
private:
const char* const file;
const int line;
};
私の意図は、次のようなクラスを使用することです: throw MyException(__FILE__, __LINE__)
.
このヘッダー ファイルを各 .cpp ファイルに含めます。コンパイラは、定義されている回数だけクラスをコンパイルし、生成するすべてのオブジェクト ファイルに (同一の) マシン コードを含めると思います。さて、リンカーは何をするでしょうか?私はより簡単な例を(それらの厄介なものをすべて除いてconst
)試してみましたが、うまくコンパイルされました。
単純なクラスの代わりに、3 画面分の長さの C 関数をヘッダー ファイルに実装するとどうなるでしょうか。最後の質問ですが、例を .h ファイルと .cpp ファイルに分割する必要がありますか?