тестирование места хранения статического константного члена

у меня есть

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'

Зачем?

0

Решение

Поместите определение для статического члена вне объявления класса, чтобы решить ошибки связывания:

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

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

Кроме того, любая модификация константного значения (посредством странных приведений) вызовет неопределенное поведение.

Неопределенное поведение — это неизвестное поведение, иногда вызывающее сбой приложения, иногда нет.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector