静态const成员变量更改值的奇怪问题

时间:2014-11-02 04:17:20

标签: c++ class static const visual-studio-debugging

假设我有一个带有静态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,即使代码正在以正确的值执行;关于可能导致这种情况的任何想法?

1 个答案:

答案 0 :(得分:3)

静态const int可能会更改其值。不合法。但无论如何可能。

该值具有内存位置,可能不在只读链接部分。如果它不是,那么写出界限可能会改变它。例如,在数组或字符串之外写入。

要找到它,我会使用调试器中断main()检查其值以查看它是321,然后设置值的监视。当它发生变化时,您发现了正在执行此操作的错误代码。