Две проверки на достоверность час и температура выполняются при построении объекта Reading. Поскольку эти проверки выполняются независимо от того, какой перегруженный конструктор вызывается, я подумал, что вызов «инициализирующего конструктора» из другого конструктора может быть плавным решением. После быстрого прочтения этого ответа я решил, что он будет работать так, как я себе представлял (это не так).
Вот наименьший воспроизводимый код проблемы, с которой я столкнулся:
Код: Выделить всё
bool valid_hour_temp(const int hour, const int temp)
{
if (hour < 0 || hour > 23) return false;
if (temp < -273.15) return false;
return true;
}
struct Reading
{
Reading(int read_hour, int read_temp)
{
if (!valid_hour_temp(read_hour, read_temp)) throw std::invalid_argument("Bad data");
hour = read_hour;
temperature = read_temp;
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/78540309/calling-constructor-from-another-constructor-leaves-data-members-un-initialized[/url]