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
的影响绝对为零,可以删除,这就是警告的意思。
以下程序使用 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
的影响绝对为零,可以删除,这就是警告的意思。