static_cast 和const_cast 区别
时间: 2024-09-06 11:02:46 浏览: 53
`static_cast`和`const_cast`都是C++中的显式类型转换,但它们的作用不同:
**static_cast**[^1]:
- 主要用于非多态类型的转换,包括但不限于在基类和子类之间(仅限于编译时确定的关系),以及简单类型之间的转换(如`int`到`char`)。
- 它不涉及运行时类型检查,也不支持动态类型信息的改变,例如不允许从非指针类型转换为指针类型。
**const_cast**[^2]:
- 用于移除或添加常量限定符。它可以用来临时修改对象的const属性,例如从`const T&`转换为`T&`,或者相反地,将`T&`转换为`const T&`。
- 注意,这并不影响实际的对象状态,只是改变了对其的访问权限表示,不会改变对象本身的状态。
举个例子,如果你想在不保证安全的情况下访问一个常量指针所指向的内容,可以这样做:
```cpp
const int *ptr = &x; // ptr是一个const int*
int temp = static_cast<int>(*ptr); // 使用static_cast去除const限制
// 注意:这可能违反了const规则,仅在理解其后果后适用
```
而如果你有一个`const int&`引用,想要临时去const化以便修改引用所指向的值,则可以这样做:
```cpp
const int &ref = x;
int &nonConstRef = const_cast<int &>(ref); // 去掉const修饰符
nonConstRef = 5; // 只能用于测试或调试,正式代码不应这么做
```
阅读全文