一句话总结:static_cast在编译时会进行类型检查,而强制转换不会。
zhaojunyandeMacBook-Pro:~ zhaojunyan$ g++ -o sc sc.cpp
sc.cpp:19:9: error: static_cast from 'A *' to 'B *', which are not related by
inheritance, is not allowed
B* p = static_cast<B*>(&a);
^~~~~~~~~~~~~~~~~~~
1 error generated.
zhaojunyandeMacBook-Pro:~ zhaojunyan$ cat sc.cpp
#include <iostream>
class A
{
public:
A(){}
~A(){}
};
class B
{
public:
B(){}
~B(){}
};
int main()
{
A a;
B* p1 = (B*)(&a);
B* p = static_cast<B*>(&a);
return 0;
}
zhaojunyandeMacBook-Pro:~ zhaojunyan$
本文通过一个具体的C++示例对比了static_cast与传统强制类型转换的区别。演示了static_cast在编译时进行严格的类型检查,而强制类型转换则没有这种检查。这有助于开发者更好地理解如何选择合适的类型转换方式。
268

被折叠的 条评论
为什么被折叠?



