如何解决与 C++ const
我正在阅读 C++ 入门。我在“const”小节中遇到了一些困惑,我真的希望有人能帮我澄清一下。
以下是书中的释义:
不改变对象值的操作之一是初始化—— 当我们使用一个对象来初始化另一个对象时,无论是 两个对象都是常量:
int i = 42;
const int ci = i; // ok: the value in i is copied into ci
int j = ci; // ok: the value in ci is copied into j
虽然ci是一个const int,但是ci中的值是一个int。 ci 的恒常性 仅对可能改变 ci 的操作很重要。当我们复制ci来初始化j时, 我们不在乎 ci 是一个常量。复制对象不会更改该对象。一次 复制完成后,新对象无法进一步访问原始对象。
除了最后一句,每一句都清楚:
复制完成后,新对象就不能再访问原始对象了。
我的困惑是:在这种情况下,什么是新对象,什么是原始对象以及为什么新对象无法进一步访问原始对象。
我希望我说清楚了。谢谢!
解决方法
对象是在内存中表示的类的实例。当您深入了解 C++ 和 OOD 时,您会遇到更多关于对象的信息。您只需要知道何时创建这样的副本:
int j = ci;
您正在创建 int 类的第二个实例,该实例位于不同的内存地址并具有自己的值。这被称为“深拷贝”,这就是(非常量)j 仍然是 const 正确的原因。无论j(新对象)在此之后发生什么,ci(原始对象)都将保持不变。我希望这会有所帮助,不要气馁,因为您将再次在 OOD 和对象原则上花费大量时间。
,什么是新对象,什么是原始对象
新对象是刚刚声明和构造的对象。例如:
SomeType newObj = originalObj;
为什么新对象无法进一步访问原始对象
newObj
无法在 originalObj
处“再次查看”,例如它无法发现 originalObj
何时发生变化,也无法更改 originalObj
。但是如果 SomeType
的构造函数通过引用获取 originalObj
,它实际上可以随时访问 originalObj
,只要它在 newObj
中存储了引用或指向它的指针。>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。