Почему я не могу использовать глобальную переменную constexpr для инициализации ссылочного типа constexpr? - PullRequest
0 голосов
/ 04 февраля 2019
#include <iostream>
using namespace std;

constexpr int r =100;
int main()
{
    constexpr int &k = r ;
    cout << k << endl;
}

Компиляция этого кода дает «error: привязка const int к ссылке типа int и сбрасывает квалификаторы» во время компиляции.

1 Ответ

0 голосов
/ 04 февраля 2019

Скомпилируйте добавление const после int.

constexpr int const & k = r ;
// ...........^^^^^

Проблема в том, что constepxr подразумевает const, поэтому при определении r

constexpr int r =100;

вы определяете constexpr как значение int const (также следует учитывать, что const применяется к типу слева; справа только, если слева нет типа; поэтому const int и int const - это одно и то же).

Но ваша k

constexpr int & k = r ;

не является const (подразумевается constexpr) ссылкой на int const, но толькоconst ссылка на int.

И вы не можете инициализировать ссылку на переменную int значением int const.

Вы можете устранить ошибку,делая k a const ссылку на int const.

...