Assigning the address of nonconst to a const pointer
我在研究指针,康斯特。我有些困惑。我知道在C++中禁止将const地址分配给非const指针,但它可以使用conconsCAST来解决。没关系。
但是,允许将非const变量的地址分配给const指针。我不明白为什么允许这样做。请看下面的例子。在本例中,ptr是指向const int的指针。但是,ptr指向的值会发生更改。这里有一个矛盾,因为ptr指向的const int值发生了变化。你能解释这个矛盾吗?如果我错了,你能解释为什么吗?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <iostream> using namespace std; int main() { int year = 2012; const int* ptr = &year; year=100; year=101; cout << *ptr; // 101 is printed, the value ptr points to change whenever year changes return 0; } |
如果您熟悉文件访问,那么有一个指向const的指针就有点像以只读方式打开一个文件。您得到了一个只能用于读取的文件句柄,但这并不意味着不能以其他方式更改该文件。
类似地,当您有一个指向const的指针时,您有一种读取对象的方法,而不是写入。但是,这并不意味着对象不能以其他方式写入。
看看这个例子:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | int year=5; // is allowed //const int year=5; // is also allowed const int* ptr = &year; // ptr points to const data, but has nonconst address *ptr = 141; // its not allowed ++ptr; // allowed int* const constPointer = &year; // ptr points to nonconst data, but has const adress *constPointer = 8; // allowed ++constPointer; // not allowed // pointed value and pointer are const const int* const constDataAndPointer = &year; // ptr points to const data, also has const adress *constDataAndPointer = 124; // not allowed ++constDataAndPointer; // not allowed |