ошибка: невозможно инициализировать переменную типа 'int * const' с rvalue типа 'const int * - PullRequest
0 голосов
/ 06 мая 2020

Почему я получаю эту ошибку: error: cannot initialize a variable of type 'int *const' with an rvalue of type 'const int * при компиляции следующего кода? Код:

constexpr int ch1 = 5;
constexpr int* pch1 = &ch1;
constexpr int ch2 = 5;
constexpr int* pch2 = &ch2;

cout << *pch1+*pch2;

Позвольте мне прояснить это. Смысл всего этого испытания - инициализировать эти переменные во время компиляции. Если есть лучший способ сделать это, дайте мне знать.

1 Ответ

1 голос
/ 06 мая 2020

Тот факт, что вы объявили pch1 и pch2 как constexpr, сам по себе не делает их const int *, поэтому вам потребуется:

constexpr int ch1 = 5;
constexpr const int* pch1 = &ch1;
constexpr int ch2 = 5;
constexpr const int* pch2 = &ch2;

Однако тогда вы получите:

error: '& ch1' is not a constant expression
error: '& ch2' is not a constant expression

Значит, вы все еще не выигрываете.

Живая демонстрация


Изменить: Как Крис указывает, что вы можете решить последнюю проблему, объявив ch1 и ch2 как static. Их адреса становятся constexpr:

constexpr static int ch1 = 5;
constexpr const int* pch1 = &ch1;
constexpr static int ch2 = 5;
constexpr const int* pch2 = &ch2;

Живая демонстрация

...