2014-11-02 76 views
-3

假設我有一個靜態const成員變量的類:奇怪的問題與靜態常量成員變量變化值

// foo.h 
class foo { 
public: 
    foo(){} 
    bool greaterThan(int someNum){return num > someNum} 
private: 
    static const int num; 
}; 

// foo.cpp 
const int foo::num = 321; 

如果我調試這在Visual Studio 2013一個奇怪的現象正在發生的事情對我來說;調試器指出num是1,即使代碼正在執行正確的值;任何可能導致這種情況的想法?

+0

你是否擁有同一個文件中的所有這些代碼? – Eric 2014-11-02 04:20:05

+0

你也不應該在foo類中有bool foo() – Eric 2014-11-02 04:20:52

+0

實際的類要大得多,但這個小例子隔離了我所遇到的問題。使用單獨的文件,標題和cpp;在我的實際程序中,num正在cpp中初始化。 – Alex 2014-11-02 04:25:19

回答

3

靜態const int可能會更改其值。不合法。但無論如何可能。

該值具有內存位置,它可能不在只讀鏈接部分。如果不是,那麼寫出界限可能會改變它。例如,在數組或字符串之外進行寫操作。爲了找到它,我將使用調試器在main()處打破它的值來查看它的值是321,然後在值上設置一個值班表。當它發生變化時,你已經找到了這樣做的壞代碼。