Тестирование места хранения статического константного члена
У меня есть
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'
Зачем?
1 ответ
Поместите определение для статического члена вне объявления класса, чтобы решить ошибки связывания:
class A
{
static const int b = 10;
...
};
const int A::b;
~~~~~~~~~~~~~~~
Кроме того, любая модификация константного значения (посредством странных приведений) вызовет неопределенное поведение.
Неопределенное поведение - это неизвестное поведение, иногда вызывающее сбой приложения, иногда нет.