参考数据会在const函数中更改另一个数据成员

A reference data-member changing another data member inside a const function

本文关键字:另一个 数据成员 函数 数据 const 参考      更新时间:2023-10-16

如果已经问这个问题,我深表歉意,但是我找不到同样的问题。请将我重定向到相关问题。

#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成员函数中的类的数据成员。

我有两个问题 -

  1. 为什么它不扔汇编错误。

  2. 我正在打印两个变量的地址,并且正如预期的那样,这两个都显示相同的地址,但是该实例的sizeof()显示为8个字节。

  1. 编译器无法在编译时完全跟踪参考目的地。
  2. 因为在某个地方需要存储参考文献。

这是一类,非常容易触发未定义的行为。只需创建一个const对象并调用const成员函数。

c 支持mutable关键字,用于更改const成员函数中对象位的支持机制。

我可以回答大小和地址部分。

可以将引用视为带有较轻语法的指针,因此它需要等同于指针的存储空间(这里有4个字节)。

仅在其初始化ref(a)期间修改参考。初始化后,对引用值执行引用上的任何操作,因此&ref给出了引用值的地址,而不是引用本身。因此,&a == &ref很有意义。