0

次のコードがあり、次の出力がある理由を知りたいです。

#include <iostream>

int main() {
    double nValue = 5;
    void *pVoid = &nValue;

    short *pInt = static_cast<short*>(pVoid);

    std::cout << *pInt << std::endl; 
    return 0;
}

そして、それは私に「0」を出力します。なぜこれが起こっているのか知りたいです。ありがとうございました!

4

5 に答える 5

0

pVoidを表すビットパターンを指しdoubleます。を使用すると、コンパイラの型情報が失われますvoid*。をにキャストするとき、void*指しshort*ているビット パターンが であると主張しますが、shortそうではありません。shortメモリ内の aと aの表現doubleはまったく異なります。を逆参照するpIntと、その場所のメモリはたまたま 0 になります。この時点で、コンパイラは値の型が実際doubleに であることを認識していないため、期待どおりであれば暗黙的な変換はできません。

于 2013-05-17T17:25:18.077 に答える
0

doublea の内容をとして解釈しようとしていshortます。これは未定義の動作を引き起こします - あなたのプログラムは自由に何でもできます。

于 2013-05-17T17:24:33.853 に答える