【发布时间】:2014-01-30 11:23:09
【问题描述】:
我们可以使用 const_cast 将 const 数据参数传递给参数为非 const 的函数。
int fun(int* ptr)
{
return (*ptr + 10);
}
int main(void)
{
int val = 10;
const int *ptr = &val;
int *ptr1 = const_cast <int *>(ptr);
cout << fun(ptr1);
return 0;
}
Output:
20
但是,我们也可以通过以下方式实现强制转换,
int fun(int* ptr)
{
return (*ptr + 10);
}
int main(void)
{
int val = 10;
const int *ptr = &val;
int *ptr1 = (int *)ptr;
cout << fun(ptr1);
return 0;
}
输出: 20
那么,在这个特定场景中使用 const_cast 有什么需要呢? 仅在这种特定情况下使用 const_cast 有什么好处吗?
【问题讨论】:
-
除了代码清晰和安全之外,还有一个优势:它是 greppable。很难找到有人使用 C 风格强制转换抛弃 constness 的所有地方。
-
(int*)在这种情况下与const_cast<int*>相同。
标签: c++ const-cast