(プログラムの過程でその値を変更できます)
または、「何かのインスタンス」はクラスとオブジェクトに厳密に関連していますか?もしそうなら、C ++に関して「変数」の概念をどのように定義しますか?
(プログラムの過程でその値を変更できます)
または、「何かのインスタンス」はクラスとオブジェクトに厳密に関連していますか?もしそうなら、C ++に関して「変数」の概念をどのように定義しますか?
回答:
私の知る限りでは、その型のプリミティブ型インスタンスの値を呼び出すことは正しいです (たとえば、Visual Studioのマニュアルの「C ++ Type System」を参照してください。ただし、別のソースを探しています)。この用語はオブジェクトを議論するときに主に使用されます。クラスCまたはそのサブクラスの1つで定義されたコンストラクターから作成されたオブジェクトは、クラスCのインスタンスです。
C ++の変数はランタイムの概念ではありません。これは、変数名と抽象(constでない場合は可変)位置との間の字句バインディングとしてコンパイラー内に存在します。プログラムがコンパイルされると、変数は存在しなくなります。代わりに、データはレジスタやメモリなどで読み書きされます。
int
。C ++標準では、変数宣言の機能について説明するときに、プリミティブ型と非プリミティブ型を区別していません。そのT t;
ため、たまたまT
どんな型であっても、型のオブジェクトを宣言T
します。
または、「何かのインスタンス」はクラスとオブジェクトに厳密に関連していますか?もしそうなら、C ++に関して「変数」の概念をどのように定義しますか?
C ++で可能な限り簡潔にする
ただ明確にします:
malloc()
が、まだ初期化されていないバッファについて話すとき、あなたはポイントを持っています:それはまだオブジェクトではないメモリ領域です。同様に、明示的に破壊されたオブジェクト:これはオブジェクトではなくなったメモリ領域です。
さて、「正しい」とはどういう意味ですか?
それについて非常に厳密にしたい場合は、以下を区別する必要があります。
したがって、変数(式)は型を持ちます。その値(参照するオブジェクト)は、あるクラスのインスタンスになります。また、変数の型とオブジェクトのクラスは一般に同じものではないことに注意してください。変数の静的型はオブジェクトの実行時クラスに上限を設けるため、クラスは型に対応するクラスのサブタイプである必要があります。
あの大きな一口をずっと繰り返したいですか?嫌です。どの程度厳密に、または大まかに話したいかは、状況によって異なります。そのため、「変数はこのタイプのインスタンスである」と言っても、ほとんど問題はありません。ここで実際に起こっていることは、オブジェクトとそのランタイムクラスのスーパークラスを参照するために、変数と型を意味論的に使用していることです。
あなたが人生全体を純粋主義と洗練に費やしたくないのであれば...はい。
一意に識別される何かを保持するたびに、インスタンス化を行っている他の一意に識別可能なことを偽造するための使用。
それらのインスタンス化のいくつかはより正確な名前を持っているかもしれませんが、一般的にこれは機能します。
多くの人々は、クラスのインスタンスのために「インスタンス」を予約します。そうすると、C ++では、変数はクラスのインスタンス、インスタンスへの参照、インスタンスへのポインター、またはプリミティブ型になります(構造体をそのコンテキストでクラスとしてカウントする可能性がありますが、ほとんどの場合、まったく同じです)。JavaまたはObjective-Cでは、変数はインスタンスではなく、インスタンスへの参照になる可能性があります。
忘れました:しばらくの間、C ++ポインターは、コンストラクターが実行を開始する前の「this」などの生のメモリーへのポインターになることがあります。この時点では、* thisをまだインスタンスと呼んでいない可能性があります。