Для простых типов положение const слева от * или & имеет те же эффекты.То есть:
const type *
эквивалентно
type const *
(так же и ссылка).Например:
const double pi = 3.14159;
const const double * pip1 = π
const double const * pip2 = π
const double & pir1 = pi;
double const & pir2 = pi;
pip1 и pip2, а также pir1 и pir2 одинаковы, и компилятор принимает их без ошибок.
Но ситуация меняется, когда дело доходит до более сложныхтипы.Для следующего кода:
const std::vector<std::string> vs(10);
const std::string * const & ppp = &vs[0];
, где тип const std::string *
, я не могу записать определение ppp
как
const const std::string * & ppp = &vw[0];
, поскольку компилятор выдает ошибку:
ошибка C2440: «инициализация»: невозможно преобразовать из «const std :: basic_string *» в «const std :: string * & '
Итак, мой вопрос: почему я не могу поставить const of & перед const * в этом случае?Я пытался добавить скобки, чтобы помочь работе компилятора, но только выдавал больше ошибок.Спасибо.
PS: я работаю над Visual Studio 2015 под Windows 10.