Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
与C+混淆+;常数 我正在阅读C++底漆。我在“const”小节中遇到了一些困惑,我真的希望有人能帮我澄清一下_C++_Constants - Fatal编程技术网

与C+混淆+;常数 我正在阅读C++底漆。我在“const”小节中遇到了一些困惑,我真的希望有人能帮我澄清一下

与C+混淆+;常数 我正在阅读C++底漆。我在“const”小节中遇到了一些困惑,我真的希望有人能帮我澄清一下,c++,constants,C++,Constants,以下是本书的释义: 在不改变对象值的操作中,有一个是初始化- 当我们使用一个对象来初始化另一个对象时,无论是 这两个对象都是常量: 虽然ci是常量int,但ci中的值是int。ci的常量 仅对可能更改ci的操作有效。当我们复制ci来初始化j时, 我们不在乎ci是常数。复制对象不会更改该对象。一旦 复制完成后,新对象无法进一步访问原始对象 除最后一句外,每句话都很清楚: 复制完成后,新对象将无法进一步访问原始对象 我的困惑是:在这个上下文中,什么是新对象,什么是原始对象,为什么新对象不能进一步访问

以下是本书的释义:

在不改变对象值的操作中,有一个是初始化- 当我们使用一个对象来初始化另一个对象时,无论是 这两个对象都是常量:

虽然ci是常量int,但ci中的值是int。ci的常量 仅对可能更改ci的操作有效。当我们复制ci来初始化j时, 我们不在乎ci是常数。复制对象不会更改该对象。一旦 复制完成后,新对象无法进一步访问原始对象

除最后一句外,每句话都很清楚:

复制完成后,新对象将无法进一步访问原始对象

我的困惑是:在这个上下文中,什么是新对象,什么是原始对象,为什么新对象不能进一步访问原始对象

我希望我把我的观点讲清楚。谢谢

什么是新对象,什么是原始对象

新对象是刚刚声明和构造的对象。例如:

SomeType newObj = originalObj;
为什么新对象不能进一步访问原始对象


newObj
无法在
originalObj
上“再次查看”,例如,它无法发现
originalObj
何时更改,也无法更改
originalObj
。但是,如果
SomeType
的构造函数通过引用获取
originalObj
,它实际上可以随时访问
originalObj
,如果它在
newObj

中存储引用或指向它的指针,那么对象就是内存中表示的类的实例。当你深入C++和OOD时,你会遇到更多的对象。您需要知道的是,当您创建这样的副本时:

int j = ci;

您正在创建int类的第二个实例,它位于不同的内存地址,并且有自己的值。这称为“深度复制”,这就是(非常量)j仍然常量正确的原因。无论在此之后j(新对象)发生什么情况,ci(原始对象)都将保持不变。我希望这会有所帮助,不要泄气,因为你将再次在OOD和对象原则上花费大量时间。

忽略这句话。这只是语言律师为“副本是与原始文件完全不同的对象”所说的话。这就像复制文件:如果一个文件是只读的,你可以将它复制到另一个位置,你可以在不影响原始(只读)文件的情况下对副本执行任何操作。这只是试图说,当你复制一个副本时,你会得到一个单独的对象。这似乎很明显,但很多初学者对此感到困惑。例如
tx=y
x
y
是不同的对象,对
x
的更改不会影响
y
(反之亦然)。这只意味着副本是与原件完全不同的对象,因此对副本执行的任何操作都不会影响原件,对原件执行的操作也不会影响副本。C++与其他一些编程语言不同,默认情况下,复制行为创建一个不同的对象(与某些语言不同,默认情况下,用另一种方法初始化一个对象意味着第二个对象引用原件,因此更改副本会影响原件,而更改原件会影响拷贝)。
int j = ci;