C++:不能从double*到int*的static_cast

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!你会得到一些奇怪的输出,我不认为这是你的意图.如果你想投的价值指向pint那时,

*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)

  • "......应该使用reinterpret_cast ......"不是一个好词. (18认同)
  • 世界并不完美.您被迫使用其他库中的代码.**在那种情况下**"使用reinterpret_cast"**是一个很好的短语:) (7认同)

Pot*_*ter 21

除了指点,double*int*没有任何共同点.你可能会说同样的事情Foo*Bar*指针类型的任何不同的结构.

static_cast表示源类型的指针可以用作目标类型的指针,这需要子类型关系.


Dat*_*han 5

支持浮点到整数转换,这样int a = static_cast<int>(5.2)很好。但是,这是一次转换-基础数据类型完全不兼容。您要的是让运行时将8字节结构的指针转换为4字节结构的指针,而这不能以任何有意义的方式进行。

话虽如此,如果您真的想将double解释为整数,则int* r = reinterpret_cast<int*>(p)可以正常工作。