Нужно ли инициализировать переменные в заголовочном файле .h

На данный момент, я считаю вопрос того, нужно ли инициализировать переменные в заголовочном файле число филосовским вопросом (делом вкуса). Но есть ли реальные советы по тому, нужно ли это делать или достаточно того, что они будут инициализированны в самом конструкторе:

class Example 
{
public:
    
    Example(void)                       noexcept;
    Example &operator=(const Example &) noexcept = default;
    Example &operator=(Example &&)      noexcept = default;
    Example(const Example &)            noexcept = default;
    Example(Example &&)                 noexcept = default;
   ~Example(void)                       noexcept = default;
    
    ... 
    
private:
    
    int num;
};

Example::Example(void) noexcept : num(0)
{
    
}

Или все же лучше так:

class Example 
{
public:
    
    Example(void)                       noexcept;
    Example &operator=(const Example &) noexcept = default;
    Example &operator=(Example &&)      noexcept = default;
    Example(const Example &)            noexcept = default;
    Example(Example &&)                 noexcept = default;
   ~Example(void)                       noexcept = default;
    
    ... 
    
private:
    
    int num = 0;
};

Example::Example(void) noexcept : num(0)
{
    
}

Слышал где-то (а может это шизофрения), что при создании класса динамически, возможно неопределенное состояние этой переменной, даже если она инициализирована в конструкторе.


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

Автор решения: KoVadim

Есть такая штука - как C++ Core Guidelines, где собраны лучшие рекомендации от создателя с++ и других хороших разработчиков языка.

Там есть такой пункт - C.48: Prefer in-class initializers to member initializers in constructors for constant initializers - предпочитайте инициализацию внутри класса нежели инициализацию в конструкторах. Причина банальная - если есть несколько конструкторов, то легко забыть инициализировать одну с переменных-членов класса.

→ Ссылка