2012-03-24 3 views
1

の大きさはどのようなものです(変数= & anotherVar)の大きさは何(変数=&anotherVar)

あなたが参照型 int&の物理的な大きさの話をしている、それはほぼ確実だろうと仮定すると、
int y = 10; // the size of y is 4 bytes 
int & x = y; // what is the size of x that receives the address of y 
+0

は、この上の標準を引用するが、32かできませんCPUアーキテクチャに応じて64ビットがターゲットになります。 – Corbin

+0

@コービン:それはyのサイズと同じですか? – faressoft

+0

@faressoftおそらくそれはそれであると定義されていないので、あなたはそれに数えることはできません。 –

答えて

3

現代のアーキテクチャー(32または64ビット・プロセッサー)では通常4または8バイトのポインター・タイプint*と同じサイズでなければなりません。

あなたはこれを使用し、お使いのコンパイラにそれを測定する場合:

struct Test { int& x; } 
printf("%d\n", (int)sizeof(Test)); 

はまた、あなたのコンパイラのかもしれないパッド、技術的には、Test構造体をあることに注意して、あなたに間違った答えを与えるが、これはおそらく正常に動作します。

sizeof(int&)sizeof(int)と同じであり、データメンバである場合にはint&が使用する容量を正確には示していません。

+0

'sizeof(int&)'はあなたにはあまり言いませんが、 'sizeof(int *)'はそれになります。 –

+0

しかし、 'sizeof(Test)== sizeof(int *)'は標準によって保証されていません(私は信じています)。 –

+0

[このトピックの概要](http://www.delorie.com/djgpp/v2faq/faq22_11.html)。私は、ポインタが他のタイプと同じようにファクタを賭けることを賭けるでしょう。つまり、構造体がパックされていない場合、サイズがオフの場合があります。次に、構造体パッキングに関する議論は、OPの範囲外です。 –

0

参照または参照型にsizeofを適用した結果は、参照型のサイズになります。 (C++ 03,5.3.3.2)

intが4バイト(必ずしも必要ではありません)であれば、参照もそうです。

+1

技術的に言えば、2番目のステートメントは、sizeofが常に型の物理サイズを返すことが保証されていない限り、真ではありません。最初のステートメントでは、char参照はsizeof()== 1を持ちますが、charへの参照はわずか8ビットです。 – Corbin

+0

この回答は「sizeofのアプリケーションの結果」について語っているので、完全に正しいです。これは参照の透明性の必要な結果です。それは実際の質問に答えるかもしれません(少し曖昧です)。 –

0

あなたはポインタと参照を混乱させると思います。

(x = &)は何ですか?

しかし、あなたの例は参照(X & x = y)です。

ポインタのサイズはどういう意味ですか?アーキテクチャに依存します。それはあなたのpaticularターゲット・タイプであるかを調べるには:

cout << sizeof(void*) 
4

なお、基準はケースのためのストレージ(C++ 11 8.3.2.4)

が必要かどうかを指定されていない

int y = 10; 
int & x = y; 

コンパイラは余分なメモリを使用しないことがあります。 xは、yの別名とみなされます。 xが初期化されると、別の変数を参照するように再割り当てすることはできないため、コンパイラはこれを実行できます。

参照が関数パラメータまたはクラス/構造体として使用される場合、おそらく内部的にポインタとして実装されるため、サイズはsizeof(int*)になります。もちろん、参照パラメータを持つ関数がインライン展開されている場合、余分なメモリは必要ありません。

0

簡単なテストは、任意の混乱を解消する必要があります(x86の32ビットプログラムとしてコンパイル)

#include <iostream> 

using namespace std; 

void f(char &r) 
{ 
    cout << sizeof(r) << endl; 
    cout << sizeof(&r) << endl; 
} 

int main() 
{ 
    char x = 0; 
    char &y = x; 
    cout << sizeof(y) << endl; 
    cout << sizeof(&y) << endl; 
    f(x); 
    return 0; 
} 

出力:

1 
4 
1 
4 
関連する問題