gpt4 book ai didi

c++ - 使用非常量指针定义对指向常量数据的指针的引用有什么问题?

转载 作者:搜寻专家 更新时间:2023-10-30 23:59:28 24 4
gpt4 key购买 nike

int main()
{
const int* x;
int* pa = x;//removes const, so UB.

const int*& pb = pa;//error
int* pd = pb;//error
return 0;
}

我知道用指向常量数据的指针定义指向非常量数据的指针是不可能的,因为它会自动取消常量性,让我可以修改值。
但是第二次初始化有什么问题呢?我知道引用是某物的别名以及它是如何工作的,但仍然根本不了解那里实际发生的事情。我想对第二个错误的解释有望启发我对第三个错误的理解。
任何人都可以阐明一下吗?谢谢!

最佳答案

const int x = 1;
int* p;
const int*& r = p;

想象一下我们已经走到这一步了。最后一行将给出您正在质疑的错误,但我们假设它有效。现在 rp 指的是同一个指针对象。但现在我们可以这样做:

r = &x;

这使 r 指向 const 对象 x,您可能认为这很好,但它也会使 p 指向它。由于 pint*(不是 const),我们现在可以使用 p 修改 x :

*p = 2;

现在我们已经更改了const 对象的值。有问题的错误阻止我们这样做。

所以基本上,这个错误的原因是能够将指向 const 的指针的引用绑定(bind)到指向非 const 的指针,这将为您提供一种方法获取指向 const 对象的非 const 指针。这很糟糕。

参见 Why am I getting an error converting a Foo**Foo const** C++ FAQ 以了解相同的问题,但使用指针而不是引用。道理是一样的。

关于c++ - 使用非常量指针定义对指向常量数据的指针的引用有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16368670/

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