corrections of annotations to the standardに基づく。const constがrvalue(つまり、メモリに格納されていない)の場合、constはconstへのポインタです。
3.14オブジェクトは、物理メモリアドレスに存在する変数または定数のいずれかです。
- Cでは、定数はメモリには存在しません(一部の文字列リテラルを除く)ので、オブジェクトではありません。
それはconstのは(おそらく文字列リテラルを除く)は、実際のメモリ位置を持っていないように私には理にかなって、それが最も可能性の高いリテラルとそれへのすべての参照を置き換えますコンパイラに依存していること値。つまり、次のことはどのように可能ですか?
const int * foo;
これは、const int
へのポインタを宣言します。しかし、定数にはアドレスがないので、これはどういう意味ですか?コンパイル時にのみ存在するリテラル値へのポインタを持つことはできません。
振り返ってみると、「const」の名前は「readonly」である必要があります。これは、通常、C:読み取り専用オブジェクトの意味です。 – pmg
'const'はコンパイル時定数を意味するものではありません。代わりに、 "型修飾子"です。これは単に 'const'が代入のターゲットとして使用できないことを意味します。ここでいくつかの興味深い議論です:http://stackoverflow.com/questions/4275504/deep-analysis-of-const-qualifier-in-c –
'const int a = 10;'、 '10'は"定数 "、著者は実際には "リテラル"と言っているはずです。 'a'はconst修飾子を持っていても「定数」ではありません。 '10'はアドレスを持っていません(おそらく著者はメモリに常駐していないと言いますが、これは無関係で大部分は間違っています)。 'a 'にはアドレスがあります。 – nos