Size: a a a

2021 March 05

MH

Max Harpsiford in pro.cxx
Stringstream сам закрывается или его нужно закрывать?
источник

MH

Max Harpsiford in pro.cxx
Это был бы легкий вариант ответа - что не освобождаются ресурсы
источник

VG

Vladislav Gordievski... in pro.cxx
Max Harpsiford
Stringstream сам закрывается или его нужно закрывать?
сам - это объект на стеке и потом деструктор
источник

VG

Vladislav Gordievski... in pro.cxx
Max Harpsiford
Это был бы легкий вариант ответа - что не освобождаются ресурсы
Да это вроде ок - все должно закрываться
источник

EM

Evgeniy Mashyanov in pro.cxx
Не инициализирован enum class; и нет возрата от int main() 2ub )
источник

VG

Vladislav Gordievski... in pro.cxx
Да это я тоже сказал, но не туда похоже
источник

AS

Anatoly Shirokov in pro.cxx
Evgeniy Mashyanov
Не инициализирован enum class; и нет возрата от int main() 2ub )
Из main return опционален и по поводу enum  мимо
источник

S

Stas in pro.cxx
Vladislav Gordievskiy
#include <boost/optional.hpp>
#include <string>
#include <sstream>

#include <iostream>

enum class StatusCode
{
   OK,
   ERROR
};

struct SResp
{
 std::string m_msg;
 StatusCode m_status;
};

SResp queryToTheMoon(size_t val)
{
   std::stringstream ss;
   for (size_t idx = 0; idx < val; ++idx)
   {
      ss << "[" << val << "]";
   }
   return { ss.str(), StatusCode::OK };
}

boost::optional<std::string> makeRequest(size_t val)
{
  auto response = queryToTheMoon(val);
   
  if (response.m_status == StatusCode::OK)
  {
      return response.m_msg;
  }
  else
  {
      return boost::none;
  }
}

int main()
{
   auto op = makeRequest(100);
   
   if (op)
   {
      std::cout << op.value() << std::endl;
   }
}

Братья по "оружию", кто подскажет какие тут есть проблемы?
Зачем копия на строке
   auto response = queryToTheMoon(val);
источник

S

Stas in pro.cxx
Или что-то не так - подразумевает невалидность кода?
источник

AS

Anatoly Shirokov in pro.cxx
Stas
Зачем копия на строке
   auto response = queryToTheMoon(val);
RVO
источник

VG

Vladislav Gordievski... in pro.cxx
По опыту собесов по С++ тут может быть все, это была одна из Немецких контор - занимается всяким измерительным оборудованием
источник
2021 March 06

KA

Kirill 🍥 Andriyanov... in pro.cxx
это вроде NRVO и оно не гарантируется стандартом.
поправьте если не так
источник

O

Ofee in pro.cxx
Kirill 🍥 Andriyanov
это вроде NRVO и оно не гарантируется стандартом.
поправьте если не так
Там нет ни того, ни другого, мы конструируем временный  boost::optional<std::string> для которого работает RVO, но из копии строки
источник

AS

Anatoly Shirokov in pro.cxx
Kirill 🍥 Andriyanov
это вроде NRVO и оно не гарантируется стандартом.
поправьте если не так
NRVO (named return value optimization) - это
object foo() {
  object named_object;
  return named_object;
}
RVO (return value optimization) :
object foo() {
   return object();
}
источник

AS

Anatoly Shirokov in pro.cxx
Ofee
Там нет ни того, ни другого, мы конструируем временный  boost::optional<std::string> для которого работает RVO, но из копии строки
RVO: return { ss.str(), StatusCode::OK };
источник

KA

Kirill 🍥 Andriyanov... in pro.cxx
понял, спасибо
я смотрел на возврат из
makeRequest
источник

O

Ofee in pro.cxx
Anatoly Shirokov
RVO: return { ss.str(), StatusCode::OK };
Да, я неправ, я тоже не туда посмотрел. Я про return response.m_msg в makeRequest, где копия всё ещё есть
источник

VG

Vladislav Gordievski... in pro.cxx
Ofee
Да, я неправ, я тоже не туда посмотрел. Я про return response.m_msg в makeRequest, где копия всё ещё есть
Вот это интересно
источник

VG

Vladislav Gordievski... in pro.cxx
источник

VG

Vladislav Gordievski... in pro.cxx
Теперь вопрос - а можно это как-то пофиксить?
источник