gpt4 book ai didi

c++ - 为什么 C++ 在将一个对象复制到另一个对象时需要对两个对象进行低级 const 限定?

转载 作者:行者123 更新时间:2023-11-30 04:55:28 32 4
gpt4 key购买 nike

我正在阅读 C++-Primer(作者:Josée Lajoie 和 Stanley B. Lippman),这时我看到了有关顶级和低级 const 的部分。在一段中,它说当复制对象时,顶级 const 将被忽略。

例如。

const int i = 24;
int i2 = i;

i 中的顶级 const 限定在复制到 i2 时被忽略。

但是,它也指出

On the other hand, low-level const is never ignored. When we copy an object, both objects must have the same low-level const qualification or there must be a conversion between the types of the two objects. In general, we can convert a nonconst to const but not the other way around.

现在,通常当 C++ 有这样的规则时,它们背后是有原因的。我发现理解它们是理解规则的基础,因此更容易内存(这就像理解数学概念而不是内存公式)。但是,我发现没有适合这里难题的逻辑规则。

总而言之,我的问题是:

  1. 为什么在复制对象时忽略顶级 const 限定? (书上也有解释为什么的,但是我好像看不懂)

Copying and object doesn't change the copied object. As a result, it is immaterial whether the object copied from or copied into is const

  1. 复制对象时从不忽略低级 const 的原因是什么? (两个对象都需要低级 const 限定)

最佳答案

顶级案例:您制作了 const 对象的拷贝,因此您的拷贝是否为 const 并不重要,因为(假设 const 正确类型)您无法通过拷贝修改原始对象。

低级别情况:您将一个句柄 复制到另一个对象。原始句柄不允许修改它所引用的对象。允许忽略低级 const 意味着您可以获得一个允许您修改引用对象的句柄,从而破坏 const 的正确性。

它会允许这种疯狂行为:

// should not modify n, right?
void foo(const int& n)
{
int& mutable_n = n;
mutable_n = 42;
}

...

int n = 0;
foo(n); // should not modify n, right?
std::cout << n << '\n'; // prints 42, wat??

关于c++ - 为什么 C++ 在将一个对象复制到另一个对象时需要对两个对象进行低级 const 限定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53031130/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com