(variable =& anotherVar)的大小是多少

时间:2012-03-24 04:01:54

标签: c++ reference pass-by-reference sizeof

(variable =& anotherVar)

的大小是多少
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

5 个答案:

答案 0 :(得分:4)

  

未指定引用是否需要存储(C ++ 11 8.3.2.4)

案例

int y = 10;
int & x = y;

编译器可能不会使用任何额外的内存;它只会将x视为y的别名。初始化x后,无法重新分配引用另一个变量,因此编译器可以执行此操作。

如果引用用作函数参数或类/结构,那么它可能在内部实现为指针,因此大小将为sizeof(int*)。当然,如果内联参数参数的函数,则不需要额外的内存。

答案 1 :(得分:3)

假设您正在讨论引用类型int&的物理大小,它几乎肯定会与指针类型int*大小相同,在现代架构中通常为4或8个字节(32位或64位处理器)。

如果要在编译器上测量它,请使用:

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

另请注意,从技术上讲,您的编译器可能会填充Test结构并给出错误的答案,但这可能会正常工作。

请注意,sizeof(int&)sizeof(int)相同,并且如果int&是数据成员,则不会确切地告诉您{{1}}将使用多少空间。

答案 2 :(得分:0)

将sizeof应用于引用或引用类型的结果是引用类型的大小。 (C ++ 03,5.3.3.2)

如果你的int是4个字节(它不一定是),那么引用也是如此。

答案 3 :(得分:0)

所以我认为你混淆了指针和引用。

你问什么是(x =& y)?

但是你的例子是一个参考(X& x = y)。

我认为你的意思是指针的大小是多少?它取决于架构。要了解您的特定目标类型:

cout << sizeof(void*)

答案 4 :(得分:0)

简单的测试应该可以解决任何困惑:

#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;
}

输出(编译为x86 32位程序):

1
4
1
4