2012-02-02 4 views
3

は、私はちょうど、コンパイラはエラーを与えるものではありませんし、コンソール上のアドレスが表示されているコード文字列リテラルのアドレスは取得できますが、整数リテラルのアドレスは取得できないのはなぜですか?

cout << &"Blahh" << endl; 

の次の行の上につまずきました。問題なくすべて正常に動作します。 "Blahh"をintに置き換えると、

cout << &10 << endl; 

コードはコンパイルされません。つまり、文字列リテラルは動作しますが、整数リテラルは動作しません。

cout << &"Blahh" << endl;が動作し、cout << &10 << endl;が動作しない理由は何ですか?

+3

短い答え: '10'は右辺値です、' 'Blahh''は左辺値です。 – ildjarn

+3

「コードはコンパイルされません」という別のステートメントは、コンパイラーまたはエラー・メッセージには言及されていません。人々は決して学ばないのだろうか? – abelenky

+2

@abelenky:あなたが個人であること、あるいは人類全体が遺伝的に進化していることを誕生から知ることは迷惑であるということですか? –

答えて

4

"Blahh"にはメモリ内のアドレスがあります(これはl値です)。 10はありません(r値)。

http://en.wikipedia.org/wiki/Value_%28computer_science%29

+5

"*' 10'はレジスタにまっすぐに行きます* "はC++とは関係ありません。 – ildjarn

+0

Pfft - あなたが正しいと思います。編集されました。 –

+4

問題は*なぜ*が '' Blahh ''' 10' 'でなければ左辺値です。この答えは用語を明確にしますが、説明しません。 –

4

例えば"Blahh"などの文字列リテラルは、タイプconst char[6]であり、そのようにアドレス空間にそれに割り当てられたメモリを有しています。整数リテラル定数10には特定のメモリ位置が割り当てられておらず、そのアドレスは取ることができません(脇に、プログラム内の定数10の値を変更できるかどうかを想像してください)。

+4

あなたのプログラムで '' Blahh ''の値を変更できるかどうかは想像してみてください。 –

関連する問題