如果这个问题已经被问过,我深表歉意,但我找不到同样的问题。 请将我重定向到相关问题。
#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 个字节。
最佳答案
- 编译器无法在编译时完全跟踪引用目标。
- 因为它需要存储在引用所指的地方。
这是一个很容易触发未定义行为的类。只需创建它的 const 对象并调用 const 成员函数即可。
C++ 支持 mutable
关键字,以实现更改 const 成员函数中对象位的受支持机制。
关于c++ - 引用数据成员更改 const 函数内的另一个数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12949671/