以下程序使用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的理解,这不应发出警告。有人可以验证吗?
答案 0 :(得分:3)
我认为您误解了警告。
这与缺少const
无关:
const_cast< int * const>(ptr)
// const
相反,这里是关于const
的存在:
const_cast<int * const>(ptr)
// ^~~~~
这里const
的作用绝对为零,可以删除,这就是警告的意思。