0

私はクラスを持っています:

    class A
    {
    public:
        A();
        ~A();

        void IncrementNum();

    private:
        int num;
    };

    A::A() : num(0)
    {

    }

    A::~A()
    {
    }

    void A::IncrementNum()
    {
        num++;
    }

    int main()
    {
        A obj;
        obj.IncrementNum();
    }

コンストラクターにブレークポイントを設定すると、num がランダムな値 (-2483290483 など) に等しいことが示されます。これは、割り当てられていないことを意味します。そして案の定、IncreementNum() を呼び出して の後の行にブレークポイントを設定するとnum++、まったく同じことが表示されます (num は乱数に等しい)。IncrementNum() を繰り返し呼び出しても何も変化せず、num も変化しません。

だから私は代わりにに変更num++することにしました.num = 1これは強制的に設定されると思いnumました. いいえ。 num個別に 1 に設定した後でも、乱数として表示されます。繰り返しになりますが、新しいバージョンの IncrementNum() を連続して呼び出しても、その値は変更されません。

何がこれを引き起こしているのでしょうか?

他の情報:

Windows 7 Home Edition と Visual Studio 2010 を使用しています

4

1 に答える 1

4

おそらくリリースモードでコンパイルしています。コンパイラは、それnumがどこにも使用されていないことを認識し、最適化します。またはで表示numして、テストを再試行してください。printf()cout

于 2013-05-20T19:30:23.063 に答える