参考数据会在const函数中更改另一个数据成员
A reference data-member changing another data member inside a const function
如果已经问这个问题,我深表歉意,但是我找不到同样的问题。请将我重定向到相关问题。
#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成员函数中对象位的支持机制。
我可以回答大小和地址部分。
可以将引用视为带有较轻语法的指针,因此它需要等同于指针的存储空间(这里有4个字节)。
仅在其初始化ref(a)
期间修改参考。初始化后,对引用值执行引用上的任何操作,因此&ref
给出了引用值的地址,而不是引用本身。因此,&a == &ref
很有意义。
相关文章:
- 为什么将一个结构的引用设置为等于另一个结构只会更改一个数据成员?
- 将类成员函数作为线程调用到另一个类成员函数时发出警告消息
- 在C++中,是否可以"overload"作为另一个类成员的对象?
- 在结构向量中搜索一个数据成员,然后打印匹配的所有数据成员
- 通过 C++ 中的另一个结构成员访问结构
- 在构造函数中从另一个类成员构造一个类成员
- 成员模板别名与另一个模板成员
- 如何在STD :: MAP中找到具有至少一个数据成员等于密钥的结构的元素
- C++ Qt4.8 :: 将对象传递给另一个类 - 成员访问不完整类型错误
- 初始化作为另一个 ISO C++成员的结构
- 参考数据会在const函数中更改另一个数据成员
- 使用SWIG包装C 类,该类调用另一个对象成员函数
- 让 pthread 等待另一个数据
- 初始化依赖于另一个类成员的类成员
- 并集:从并集的一个数据成员中读取数据,然后写入另一个
- 我可以初始化一个数据成员,这些成员本身就是头文件中的类
- 我可以使用另一个类成员初始化初始化列表中的对象吗?
- 如何将结构拆分为块,以便将字节保存到 C/C++ 中的另一个数据结构
- 对<MyClass> MyClass 的一个数据成员进行排序向量?
- 基于另一个数据成员的类数据成员类型