c++ - 引用数据成员更改 const 函数内的另一个数据成员

标签 c++ reference constants

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

#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 成员函数中对象位的受支持机制。

关于c++ - 引用数据成员更改 const 函数内的另一个数据成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12949671/

相关文章:

php - 如何更改 PHP 常量?

java - 为什么Java中的常量是这样的?

PHP 通过引用返回静态变量

c# - 多个项目依赖于同一二进制引用的解决方案

c# - 将 mysql.data 引用添加到 VS2010

c++ - UnitTest++ 问题 : Trying to use a Predicate that has state

c++ - 在 VSCode 中调试 C++ 期间将输入传递给 std::cin 的问题

c++ - 将 boost::chrono 计时机制包装到类编译错误中?

c++ - 状态机问题

c++ - 比较 boost 功能 - 功能签名?