为什么引用大小始终为 4 个字节 - C++
why reference size is always 4 bytes - c++
在 32 位机器上,我总是得到引用 4 字节的sizeof
,即使它是对双精度的引用,那么它真正在这 4 个字节中存储什么。
编辑:
class A{
public:
double& a;
};
int main(){
cout << sizeof(A) << endl; // this will print out 4
}
sizeof
(C++11,5.3.3/4(上非常明确:
应用于引用或引用类型时,结果为 引用类型的大小。
所以如果你真的在拿sizeof(double&)
,编译器告诉你sizeof(double)
是4。
更新:所以,你真正在做的是将sizeof
应用于类类型。在这种情况下,
当应用于类时,结果是 该类的对象 [...]
所以我们知道 A
内部引用的存在会导致它占用 4 个字节。这是因为即使标准没有规定如何实现引用,编译器仍然必须以某种方式实现它们。根据上下文的不同,这可能非常不同,但对于类类型的引用成员,唯一有意义的方法是在背后偷偷溜进double*
,并称其为double&
。
因此,如果您的体系结构是 32 位(其中指针长度为 4 字节(,则可以解释结果。
请记住,引用的概念与任何特定的实现无关。该标准允许编译器随心所欲地实现引用。
你不能,也不是。
C++引用不是指针。它是对象的别名。有时,编译器选择使用指针来实现这一点。但通常,它通过什么都不做来实现它。通过简单地生成直接引用原始对象的代码。
在任何情况下,应用于引用类型的sizeof
都不会提供引用的大小。所以不清楚你在做什么,因此无法解释正在发生的事情。
编辑
现在您已经展示了一些代码,我们可以回答这个问题:
您正在采用包含引用的类的大小。正如我上面所说,引用不是指针,但在必要时,编译器可能会回退到使用指针来表示它。当您创建包含引用的类时,编译器可以实现它的唯一(理智(方法是定义一个保存对象地址的类。在 32 位系统上,地址的宽度为 32 位或 4 个字节。所以sizeof
这样的类(通常(是 4。
- 从不同线程使用int64的不同字节安全吗
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 在UNIX系统中使用DIR查找文件的字节大小
- 如何使用Crypto++并为RSA返回可打印的字节/字符数组
- std::当在256字节边界上写入整数时,流的奇怪行为
- 当比特(而不是字节)的顺序至关重要时的持久性
- 从文件中读取多个字节,并将它们存储在C++中进行比较
- 如何在文件中查找字节序列
- luaL_dofile在已知良好的字节码上失败,可以使用未编译的版本
- 字节到位运算符重载C++
- 在java中读取c++字节的位字段
- 使用 std::vector::reverse_iterator 将 int 序列化为字节向量?
- 字节真的是最小可寻址单元吗
- struct.error:解压缩 C++ 结构时,解包需要 288 字节的缓冲区
- 读取文件中所有可能的十六进制 16 字节序列并打印每个序列
- 如何使用 OpenCV 解码在两个 UWP 应用之间发送的图像字节?
- 如何将字节数组元素替换为修改的十六进制 ASCII 符号?
- asn1c 不会从 asn.1 模块中提取八位字节字符串的默认值
- 如何将原始字节附加到 std::vector?
- 基于字节数组生成静态范围整数值