【发布时间】:2018-01-04 01:18:57
【问题描述】:
当一个变量将两个变量别名为
int a;
const int &b = a;
这两个变量实际上是同一件事,因此应用于变量a 的任何更改也会应用于变量b。但是,当使用指针完成相同的技巧时,它似乎不会以相同的方式工作,如下面的程序所示:
#include <iostream>
int main(void) {
int *a = (int*) 0x1;
const int *const &b = a;// Now b should be an alias to a.
a = (int*) 0x2;// This should change b to 0x2.
std::cout << b << "\n";// Outputs 0x1 instead of the expected value of 0x2.
return 0;
}
现在变量a 似乎毕竟不是变量b 的别名,但为什么呢?
【问题讨论】:
-
在您的第一个示例中,您仅在引用类型中添加了 one
const。在您的第二个示例中,您突然添加了 twoconsts。为什么是两个?这就是使您的第二个示例与第一个示例非常不同的原因。如果你想要相似性,你应该简单地完成int *const &b = a;。这将使您的第二个示例的行为与您的第一个示例相似。 -
恕我直言,编译器应该对这种情况发出警告。
-
之所以使用两个
const修饰符是因为我想防止通过b修改指针数据。 -
注意
a被声明指向内存地址0x1,也就是UB开头。你不能只写内存中的某个地方,尤其是0x1。您应该将a指向某个正确的地址。
标签: c++ pointers reference constants