Что возвращает c ++ std :: list :: front () с пустым списком? - PullRequest
1 голос
/ 31 марта 2020

Если у меня есть код:

struct Test
{
  int x = 10;
};

int main()
{
  std::list<Test> linkedList;
  std::cout << linkedList.front().x << std::endl;
}
---

out -> 0

Почему я получаю 0 для моего значения test.x? Если я изменяю список на тип int, он возвращает 0. Если я даю ему тип символа, я ничего не получаю (или "").

Мне любопытно, как (и почему) это происходит под капотом , Как он обрабатывает возврат значения любого типа и не выходит из программы или требует try / catch?

1 Ответ

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

linkedList является пустым list. Вызов front() приводит к UB , означает, что все возможно.

Возвращает ссылку на первый элемент в контейнере.

Вызов фронта в пустом контейнере не определен.

...