在32位机器上sizeof,即使它是对double的引用,我总是得到4个字节的引用,所以它真正存储在这4个字节中.
编辑:
class A{
public:
double& a;
};
int main(){
cout << sizeof(A) << endl; // this will print out 4
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*Jon 38
标准非常明确sizeof(C++ 11,5.3.3/4):
应用于引用或引用类型时,结果是引用类型的大小.
因此,如果您真的在考虑sizeof(double&),编译器会告诉您这sizeof(double)是4.
更新:那么,你真正在做的是应用于sizeof类类型.在这种情况下,
应用于类时,结果是该类对象中的字节数[...]
所以我们知道内部引用的存在A导致它占用4个字节.这是因为即使标准没有强制要求如何实现引用,编译器仍然必须以某种方式实现它们.根据上下文的不同,这可能会有所不同,但对于类类型的参考成员来说,唯一有意义的方法是潜入double*幕后并将其称为double&面对面.
因此,如果您的体系结构是32位(其中指针长度为4个字节),则可以解释结果.
请记住,引用的概念与任何特定实现无关.该标准允许编译器实现它想要的引用.
jal*_*alf 22
你不能,也不是.
C++引用不是指针.它是对象的别名.有时,编译器选择使用指针来实现它.但通常情况下,它通过什么都不做来实现它.通过简单地生成直接引用原始对象的代码.
在任何情况下,sizeof应用于引用类型都不会给出引用的大小.因此,你所做的事情并不是很清楚,因此无法解释正在发生的事情.
编辑
既然您已经显示了一些代码,我们可以回答这个问题:
您正在获取包含引用的类的大小.如上所述,引用不是指针,但在必要时,编译器可能会回退到使用指针来表示它.当您创建包含引用的类时,编译器可以实现它的唯一(理智)方式是定义一个包含对象地址的类.在32位系统上,地址为32位或4字节宽.所以sizeof这样的课程(通常)是4.
| 归档时间: |
|
| 查看次数: |
12836 次 |
| 最近记录: |