2

以下程序使用 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 的理解,这不应该发出警告。任何人都可以验证这一点吗?

4

1 回答 1

6

我想你误解了警告。

这不是缺少const这里:

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

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

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

这里const的效果绝对为零,可以删除,这就是警告的意思。

于 2018-12-19T00:02:21.033 回答