C ++ изменение ссылочного значения константного указателя - PullRequest
1 голос
/ 05 августа 2020

Сегодня я столкнулся с похожей частью кода, и это заставило меня задуматься. Я сам провел небольшой эксперимент, как показано ниже.

Почему первая stuff функция с общим указателем позволяет изменять значение, а вторая - нет?

#include <memory>

void stuff(const std::shared_ptr<int> &var)
{
    *var = 5;
}

void stuff(const int* &var)
{
    *var = 5;
}

int main()
{
    auto a = std::make_shared<int>();
    stuff(a);

    int* b;
    stuff(b);

    return 0;
}

1 Ответ

4 голосов
/ 05 августа 2020

Эти два типа:

  • const std::shared_ptr<int>
  • const int* (он же int const*)

принципиально разные:

  • Первый - это const указатель на int;
  • Второй - это указатель на const int.

shared_ptr эквивалент версии, которая не разрешает модификацию указателя, будет std::shared_ptr<const int>.

Эквивалент необработанного указателя версии, которая делает разрешает изменение указателя, будет int* const.

Возможность изменять указатель и способность изменять указатель - разные вещи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...