微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

与 C++ const

如何解决与 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 举报,一经查实,本站将立刻删除。