includeはクラス用であり、usingはnamespace stdなどの組み込みのもの用であることを私は知っています...何かを含めると、オブジェクトを作成してそれらをいじることができますが、何かを「使用する」場合は、ある種の組み込み関数を使用します。では、どうすれば「使用」できる独自の「ライブラリ」を作成できるのでしょうか。
3 に答える
簡単に言えば#include
、プリコンパイラーに、インクルードされているヘッダーファイルの内容を現在の変換ユニットにコピーアンドペーストするように指示します。プリコンパイラによって評価されます。
一方using directive
、別のスコープのシンボル名を現在のスコープに取り込むようにコンパイラーに指示します。これは基本的にコンパイラによって有効になります。
では、どうすれば「使用」できる独自の「ライブラリ」を作成できるのでしょうか。
名前空間は、シンボル名の衝突を防ぐために使用されるものです。そして通常、すべてのライブラリ実装者は、その機能を1つまたは複数の名前空間にラップします。
「include」は基本的に、ファイルの値を「include」行の場所にコピーアンドペーストします。これは、ソースコード(通常は.cファイル)が他のソースコード(通常は.hファイルにある)の宣言を認識できるようにするために使用されます。
'using'は基本的に、次のコードで何か(通常は名前空間)を使用していることをコンパイラーに通知するため、毎回明示的に行う必要はありません。
それ以外の:
std::string a;
std::string b;
std::string c;
あなたは書くことができます:
using namespace std;
string a;
string b;
string c;
どちらも同じ機能を提供すると言うことができますが、#includeはコンパイラによって実行されませんが、使用はコンパイラによって実行されます。#includeでは、すべてのコードがファイルに配置されます。ここで、#includeが指定されます。ここで、名前空間は、あるスコープから別のスコープへの関数と変数の定義を提供します。2つのヘッダーファイルに同じ名前の関数があり、両方がインクルードされている場合、再宣言のエラーが発生しますが、名前空間が異なる場合は同じ名前の関数を使用できます。