Проблема с: 'const int * const & alias_for_ptr = ptr;', почему оба идентификатора имеют разные значения? - PullRequest
3 голосов
/ 19 декабря 2010

У меня проблемы с пониманием значения 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*’.

1 Ответ

2 голосов
/ 19 декабря 2010

Какой компилятор вы используете?Я скомпилировал под MSVC ++ 2010, и он работает, как вы ожидаете.

Я думаю, что то, что происходит, является временным, присваивается константной ссылке, так как тип "ptr" преобразуется из "int *"к" const int * ".Что произойдет, если вы удалите первый констант?

РЕДАКТИРОВАТЬ: Читайте здесь для получения дополнительной информации о ссылках: Инициализация ссылок в C ++ .

...