2014-11-02 96 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,然后在值上设置一个值班表。当它发生变化时,你已经找到了这样做的坏代码。