(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
答案 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