sam*_*moz 17 c++ casting static-cast
当我尝试使用static_cast将double*转换为int*时,我收到以下错误:
invalid static_cast from type ‘double*’ to type ‘int*’
Run Code Online (Sandbox Code Playgroud)
这是代码:
#include <iostream>
int main()
{
double* p = new double(2);
int* r;
r=static_cast<int*>(p);
std::cout << *r << std::endl;
}
Run Code Online (Sandbox Code Playgroud)
我理解在double和int之间转换会有问题,但为什么在double*和int*之间转换有问题?
Jac*_*cob 25
你应该reinterpret_cast用于铸造指针,即
r = reinterpret_cast<int*>(p);
Run Code Online (Sandbox Code Playgroud)
除非你想看一个int高级版double!你会得到一些奇怪的输出,我不认为这是你的意图.如果你想投的价值指向p到int那时,
*r = static_cast<int>(*p);
Run Code Online (Sandbox Code Playgroud)
此外,r未分配,因此您可以执行以下操作之一:
int *r = new int(0);
*r = static_cast<int>(*p);
std::cout << *r << std::endl;
Run Code Online (Sandbox Code Playgroud)
要么
int r = 0;
r = static_cast<int>(*p);
std::cout << r << std::endl;
Run Code Online (Sandbox Code Playgroud)
Pot*_*ter 21
除了指点,double*并int*没有任何共同点.你可能会说同样的事情Foo*和Bar*指针类型的任何不同的结构.
static_cast表示源类型的指针可以用作目标类型的指针,这需要子类型关系.
支持浮点到整数转换,这样int a = static_cast<int>(5.2)很好。但是,这是一次转换-基础数据类型完全不兼容。您要的是让运行时将8字节结构的指针转换为4字节结构的指针,而这不能以任何有意义的方式进行。
话虽如此,如果您真的想将double解释为整数,则int* r = reinterpret_cast<int*>(p)可以正常工作。