c++ - C++中static_cast的理解
问题描述
我试图了解它是如何static_cast
工作的。我有以下代码:
Projcet::ProjcetType result =
static_cast<Projcet*>(DS)->removeProjcet(ID);
从文档中我了解到它用于创建临时对象。如果没有 ,以下命令应该如何static_cast
?我觉得它会让我更好地理解它的作用。
编辑:
忘了说:void *DS
而且Projcet
是一类。
解决方案
我猜这DS
来自一些旧的 Windows 库,它返回一个void*
. 可能是用 C 语言编写的。所以你得到了这个 void 指针并想把它用作Projcet
参考。DS
除了它是一个指针之外,您的编译器一无所知。所以它不能把它当作一个对象指针Projcet
。
因此,通过使用static_cast
,您告诉编译器您想DS
用作指向Projcet
对象的指针。现在编译器可以连接到 member 之类的东西removeProjcet()
。
不利的一面static_cast
是,如果您没有真正的指向程序的指针,Projcet
则该程序最有可能崩溃。更糟糕的是,继续未定义的行为。
推荐阅读
- mysql - RoR/MySQL 删除 DISTINCT 和 ORDERING 不会产生任何结果
- selenium - 带有 PicoContainer 的 Appium Cucumber 框架的测试数据类 POM
- encryption - 如何从 iOS Swift 中的 RSA 私钥获取模数和指数?
- amazon-web-services - 使用 Python 的 AWS Lambda SES SMTPLib 电子邮件超时
- pytorch - 如何将火炬张量更改为与另一个张量连接
- javascript - 我正在使用 react.js 和 django 作为后端 & 我想使用 axios lib 将图像从 react.js 表单上传到 django
- json - JSON多个别名角8
- c++11 - 我们什么时候应该将 std::unique_ptr 与 std::shared_ptr 用于类成员变量?
- python-3.x - 带有 SAM CLI 的 Lambda 层
- javascript - return 语句在 forEach 循环中不起作用