質問

私がint *にダブル*をキャストするためにはstatic_castを使用しようとすると、私は次のエラーを取得する:

invalid static_cast from type ‘double*’ to type ‘int*’

ここでのコードは次のとおりです。

#include <iostream>
int main()
{
        double* p = new double(2);
        int* r;

        r=static_cast<int*>(p);

        std::cout << *r << std::endl;
}

私は、ダブル、int型の間の変換の問題があるだろうということを理解し、なぜダブル*とint型*?

との間の変換問題があります
役に立ちましたか?

解決

別にいるのポインタ、double*int*から共通点は何もありません。あなたは、任意の非類似の構造にFoo*Bar*ポインタ型についても同じことを言うことができます。

ソース・タイプのポインタが のサブタイプの関係を必要とする先の型のポインタとして使用することができる。

static_cast手段

他のヒント

あなたはすなわち、ポインタをキャストするためにreinterpret_castを使用する必要があります。

r = reinterpret_cast<int*>(p);

もちろん、これは意味をなさない、

あなたはintdoubleレベル見てみたいしない限り!あなたは、いくつかの奇妙な出力を得るでしょうし、私はこれがあなたの意図したものではないと思います。あなたがpへのintで指さをキャストしたい場合は、

*r = static_cast<int>(*p);
あなたは、次のいずれかを行うことができますので、また、rを割り当てられたのではありません。

int *r = new int(0);
*r = static_cast<int>(*p);
std::cout << *r << std::endl;

または

int r = 0;
r = static_cast<int>(*p);
std::cout << r << std::endl;
int a = static_cast<int>(5.2)が微細であるので、

浮動小数点整数への変換は、サポートされています。しかし、それは転換だ - 基本となるデータ型は、完全に互換性がありません。何しているの提示は、それがどんな意味のある方法で行うことができない4バイトの構造体へのポインタに8バイトの構造体へのポインタを変換するためのランタイム用です。

あったこと、あなたが本当に整数として、あなたのダブルを解釈するようにしたい場合は、int* r = reinterpret_cast<int*>(p)は罰金に動作します、と述べています。

あなたは異なった型へのポインタとの間に二重とstatic_cast<>とint型ではなく、間を変換することができます。あなたはvoid *static_cast<>にまたはから任意のポインタ型に変換することができます。

根拠はint *double *は、多くの場合、効果的に配列していることもあり、および実装は、配列がどの程度の大き知っていません。

あなたの代わりにdouble *doubleを使用しているので、

*それはあなたが定期的に、二重とは大きく異なっているポインタを、宣言していることを意味した。

C ++が安全そのようなポインタの異なるタイプへのポインタをstatic_castすることができない。

あなたはこのちょっとのことをやりたいと思っている場合は、

、あなたは最初の変数を逆参照する必要があります。

r=new int(static_cast<int>(*p));

あなたはnewを使用する必要があり、ダブルと整数が同じメモリ空間に存在することはできませんので(sanely)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top