Обновить

Комментарии 6

Интересно. Спасибо.

В современном C++ не вижу ни одной причины не писать вот так:

struct Response {
  bool error = false;
  bool succeeded = false;

  std::string data;
};

И все вопросы про инициализацию снимаются.

P.S. статья по теме https://habr.com/ru/companies/jugru/articles/469465/ и легендарная гифка https://habrastorage.org/webt/bp/rd/ow/bprdow1rk6jtw5fzpm3bffzirps.gif

Зачем столько часов было тратить на изучение особенностей разных компиляторов? Понятно же, что поля не проинициализированы. Можно быстро исправить и потратить время на размышления о том, как плохо программировать на флагах.

Феерично! Это идеальный пример того как ссылки на "неопределенное поведение" маскируют не понимание не только С++, но вообще основ программирования!

Автору просто по фигу что если одно и тоже значение передавать два раза / скопировать в два поля, причем во второе с инверсией, то получается не два, а четыре возможных значения. По сути это и вызывает наивное удивление и жалобы о том что в С++ все очень неопределенно. Только при чем здесь С++. Если bool скопировать два раза то возможны ЧЕТЫРЕ варианта, чему здесь удивляться, при чем здесь С++ ?

правильно будет что-то на базе:

struct Response {
  
  std::optinal<bool> error;
  std::optinal<bool> succeeded;
};

или

struct Response {
  
  bool error -> !res;
  bool succeeded -> res;
  privite:
  std::optinal<bool> res;
};

Но чтобы сделать правильно это же напрягаться-думать надо, гораздо проще жаловаться на неопределенное поведение и получать зарплату за бесконечное исправление чужих, а потом и собственных багов и лавры мастера по борьбе с UB.

По моему, с точки зрения архитектуры, структура передаваемого значения в виде

{ "error": false, "succeeded": true }

означает, что проектировщики этого закладывали, что возможны ситуации, когда оба значения равны true или false, просто их надо правильно обрабатывать.

Если была необходимость устанавливать в true только одного поля, передавалось бы только одно поле.

Ожидал продолжения, что исправление завалило прод с убытками на миллиарды евро

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации