c++ const_cast gcc 8.2.1 -Wignored-qualifiers 错误?

c++ const_cast gcc 8.2.1 -Wignored-qualifiers bug?

以下程序使用 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 的理解,这不应该发出警告。谁能验证一下?

我认为你误解了警告。

这里不是说缺少const

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

相反,这是关于 const 的存在:

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

此处 const 的影响绝对为零,可以删除,这就是警告的意思。