0

我有一个

class A  
{  
private:  
    static const int b = 10;  
public:
    static void testReadOnly(int _b)
    {
        const_cast<int &>(A::b) = _b;
    }
};  

我想测试成员变量b是否在编译时初始化并因此存储在code-segment(只读)中。
为此,我尝试更改 的值b,如果它实际上存储在code-segment.

我认为应该构建上面的代码,但我的编译器/链接器告诉我undefined reference to 'A::b'

为什么?

4

1 回答 1

2

在类声明之外放置静态成员的定义以解决链接错误:

class A  
{  
    static const int b = 10;
    ...
};

const int A::b;
~~~~~~~~~~~~~~~

此外,对常量值的任何修改(通过奇怪的强制转换)都会调用未定义的行为

未定义行为是一种未知行为,有时会导致应用程序崩溃,有时不会。

于 2013-11-10T13:56:46.637 回答