Что хранится в указателе до инициализации? C++
Есть класс в котором есть статическое поле, являющееся указателем. Что хранится в этом поле? Можно ли как-то инициализировать это поле-указатель по умолчанию нулем? Пример кода:
class A {
public:
static int* m_ptr;
}
Пробовал так:
static int* m_ptr = 0;
Но пишет, что поле с инициализатором внутри класса должен быть const
Ответы (1 шт):
Все нелокальные объекты со статической продолжительностью хранения (в том числе и статические переменные-члены класса) по умолчанию инициализируются нулевым значением (zero-initialized).
Статические переменные-члены класса также должны быть определены ровно в одном модуле трансляции — в противном случае это вызовет ошибку линковки. Синтаксис определения будет выглядеть как-то так:
int *A::m_ptr;
Соответственно инициализировать их можно при определении:
int *A::m_ptr = (int *) 0xDEADBEEF;
В C++17 также появился синтаксис inline static:
class A {
public:
inline static int* m_ptr = (int *) 0xDEADBEEF;
}
Подробности про инициализацию переменных на cppreference.