Что хранится в указателе до инициализации? C++

Есть класс в котором есть статическое поле, являющееся указателем. Что хранится в этом поле? Можно ли как-то инициализировать это поле-указатель по умолчанию нулем? Пример кода:

class A {
public:
    static int* m_ptr;
}

Пробовал так:

static int* m_ptr = 0;

Но пишет, что поле с инициализатором внутри класса должен быть const


Ответы (1 шт):

Автор решения: Fat-Zer

Все нелокальные объекты со статической продолжительностью хранения (в том числе и статические переменные-члены класса) по умолчанию инициализируются нулевым значением (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.

→ Ссылка