У меня проблемы с пониманием значения const int* const &alias_for_ptr = ptr;
в отношении следующего:
#include <iostream>
using namespace std;
int main() {
int a = 10;
int* ptr = &a;
const int* const &alias_for_ptr = ptr;
ptr = NULL; //or ptr = 0;
if (ptr == alias_for_ptr)
//This should execute but doesn't
cout << "ptr == alias_for_ptr" << endl;
else
//This should NOT execute but DOES
cout << "ptr != alias_for_ptr" << endl;
return 0;
}
Почему ptr == alias_for_ptr
возвращает false, (на самом деле alias_for_ptr
сохраняет свое старое значение &a
)?У меня сложилось впечатление, что alias_for_ptr
всегда будет иметь то же значение, что и ptr
(хотя используется символ &), и что const int* const X = Y
только гарантирует, что я не смогу изменить как значение X
, так и указанное значениеX
через этот идентификатор X
.
Также, если я удалю второй const
, скрипт не скомпилируется, что смущает меня в дальнейшем.Обратите внимание, что ошибка компиляции: invalid initialization of reference of type ‘const int*&’ from expression of type ‘int*’
.