should be initialized in the member initialization list в c++

students.h:

#pragma once

struct Students
{
        std::string name;
        int raiting;
};

qwer.cpp:

#include <iostream>
#include "students.h"

int main()
{
        Students Nick;
        Nick.raiting = 1;
        std::cout << Nick.raiting << std::endl;
        return 0;
}

Выдает предупреждение. Что оно означает?:

students.h: In constructor ‘Students::Students()’:
students.h:3:8: warning: ‘Students::name’ should be initialized in the member initialization list [-Weffc++]
    3 | struct Students
      |        ^~~~~~~~
students.h:3:8: warning: ‘Students::raiting’ should be initialized in the member initialization list [-Weffc++]
qwer.cpp: In function ‘int main()’:
qwer.cpp:6:11: note: synthesized method ‘Students::Students()’ first required here
    6 |  Students Nick;
      |           ^~~~

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

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

Чтобы закрыть эти предупреждения можно поставить конструктор по-умолчанию.

struct Students
{
    std::string name { } ;
    int raiting { } ;
};

Тогда переменнаю raiting - всегда будет инициализирована нулём. Против забывчивых. А переменная name всегда уже будет инициализирована, вот это лажа компилятора (лишнее советует).

→ Ссылка