у меня есть
class A
{
private:
static const int b = 10;
public:
static void testReadOnly(int _b)
{
const_cast<int &>(A::b) = _b;
}
};
и я хочу проверить, является ли переменная-член b
инициализируется во время компиляции и поэтому сохраняется в code-segment
(Только для чтения).
Для этого я пытаюсь изменить значение b
, которая должна вызывать какую-то ошибку времени выполнения (то есть ошибку сегментации, генерируемую MMU), если она действительно хранится в code-segment
,
Я предполагал, что приведенный выше код должен быть собран, но мой компилятор / компоновщик говорит мне undefined reference to 'A::b'
Зачем?
Поместите определение для статического члена вне объявления класса, чтобы решить ошибки связывания:
class A
{
static const int b = 10;
...
};
const int A::b;
~~~~~~~~~~~~~~~
Кроме того, любая модификация константного значения (посредством странных приведений) вызовет неопределенное поведение.
Неопределенное поведение — это неизвестное поведение, иногда вызывающее сбой приложения, иногда нет.
Других решений пока нет …