【发布时间】:2012-10-18 07:51:10
【问题描述】:
如果这个问题已经被问过,我很抱歉,但我找不到同样的问题。 请将我重定向到相关问题。
#include<iostream>
using namespace std;
class ABC
{
int a;
int &ref;
public:
ABC(int arg = 0):a(arg), ref(a){}
void mutate_func(int arg) const {
ref = arg;
}
void print_val() {
cout << endl << &a << "\t" << &ref;
cout << endl << a << "\t" << ref;
}
};
int main()
{
ABC abc_obj(5);
cout << sizeof(abc_obj);
abc_obj.print_val();
abc_obj.mutate_func(10);
abc_obj.print_val();
return 0;
}
我正在尝试通过仅属于同一类的引用变量来修改 const 成员函数内的类的数据成员。
我有两个问题 -
为什么不抛出编译错误。
我正在打印两个变量的地址,并且正如预期的那样,两者都显示相同的地址,但实例的 sizeof() 仍然显示大小为 8 个字节。
【问题讨论】:
-
@Andrey 这有点不同,因为被引用的值也是同一个对象的一部分。
-
编译器在编译
mutate_func时无法知道这一点 -
@Andrey 这就是对象大小为 8 字节的原因吗??
-
是的。您可以期望编译器非常聪明地优化
ref,但事实并非如此。请参阅 Johannes Schaub 的答案。