Я получаю предупреждения при компиляции - PullRequest
0 голосов
/ 31 марта 2020

Это моя структура:

struct player {
    string name;
    string surname;
    int goals;
    string tim;

};

Это моя функция:

void read(player* x, int n)
{
    int i;
    for (i = 0; i < n; i++)
    {

        cout << "************************************************" << endl;
        cout << "Name:";
        cin >> x->name;
        cout << endl << "Surname:";
        cin >> x->surname;
        cout << endl << "Goals :";
        cin >> x->goals;
        cout << endl << "Name of the team:";
        cin >> x->tim;
        x++;
    }
}

Во время компиляции я получаю это предупреждение:

Предупреждение C26495 Переменная 'player :: goal' не инициализирована. Всегда инициализируйте переменную-член (type.6).

Я не понимаю, почему?

Ответы [ 2 ]

0 голосов
/ 31 марта 2020

Несмотря на то, что они выглядят одинаково, int и string довольно различаются тем, что int является фундаментальным типом, тогда как string является классом.

Классы могут иметь конструкторы по умолчанию и, следовательно, автоматически инициализировать до разумного значения ("" в случае строки). Фундаментальные типы просто получают тот битовый шаблон, который был в том месте, где они хранятся.

Применение инициализатора для фундаментальных типов не инициализирует в ноль, поэтому:

struct player {
    string name;
    string surname;
    int goals {};
    string tim;
};

Поскольку он делает без разницы с классами, вы можете захотеть использовать его всегда:

struct player {
    string name {};
    string surname {};
    int goals {};
    string tim {};
};
0 голосов
/ 31 марта 2020

Вы можете решить предупреждение с помощью:

struct player {
    string name;
    string surname;
    int goals = 0;
    string tim;
};

Проблема с неинициализированными переменными состоит в том, что это UB, чтобы прочитать их, прежде чем записать значение в первую очередь. При инициализации мы избегаем этого UB.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...