Dan*_*atz 2 c++ pointers reference
int main()
{
const int* x;
int* pa = x;//removes const, so UB.
const int*& pb = pa;//error
int* pd = pb;//error
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我知道pointer to non-const data用a 定义a 是不可能的pointer to const data,因为它会自动取消constness,允许我修改值.
但是第二次初始化有什么问题?我知道引用是某个东西的别名以及它是如何工作的,但仍然没有得到实际发生的事情.我想第二个错误的解释将有希望启发我第三个错误.
任何人都能解释一下吗?谢谢!
const int x = 1;
int* p;
const int*& r = p;
Run Code Online (Sandbox Code Playgroud)
想象一下,我们已经走到了这一步.最后一行将给出您正在质疑的错误,但让我们假设它有效.现在r,p引用相同的指针对象.但现在我们可以这样做:
r = &x;
Run Code Online (Sandbox Code Playgroud)
这使得你可能认为很好r的const对象x,但它也会p指出它.既然p是int*(不是const),我们现在可以p用来修改x:
*p = 2;
Run Code Online (Sandbox Code Playgroud)
现在我们已经改变了const对象的价值.有问题的错误阻止我们这样做.
所以基本上,这个错误的原因是能够将对const指针的引用绑定到指向非的指针const将为您提供一种方法来使非const指针指向const对象.那很糟.
请参阅为什么我在转换Foo**→Foo const** C++常见问题时遇到错误,以了解相同的问题但使用指针而不是引用.理由是一样的.