C++ const_cast gcc 8.2.1 -Wignored-квалификаторы ошибка?

Следующая программа производит это с помощью gcc 8.2.1:

предупреждение: классификаторы типов игнорируются в типе результата приведения [-Wignored-qualifiers] int * const ptrCast = const_cast(ptr);

int main() {                                         
  int i = 0;                                         
  const int * const ptr = &i;                        
  int * const ptrCast = const_cast<int * const>(ptr);

  return *ptrCast;                                   
}

Скомпилировано как: gcc -Wignored-qualifiers test.cc

Из моего понимания const_cast это не должно давать предупреждение. Кто-нибудь может это проверить?

1 ответ

Решение

Я думаю, что вы неправильно поняли предупреждение.

Дело не в отсутствии const Вот:

const_cast<      int * const>(ptr)
//         const  

Скорее, речь идет о наличии const Вот:

const_cast<int * const>(ptr)
//               ^~~~~

Вот const имеет абсолютно нулевой эффект и может быть удален, вот что говорит предупреждение.

Другие вопросы по тегам